# Generated by Makefile. Do not edit.

2026-01-26  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.8.0   ==========

2026-01-26  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2026-01-11  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2025-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add widget hierarchy comments into DialogPasswordEntry constructor

2025-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Partition::m_flags private and provide necessary methods
    
    This member variable already has several methods querying and modifying
    it.  However it was also public and directly read and updated.  To be
    consistent make m_flags private and provide the necessary additional
    access and update methods.

2025-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Partition::m_flags
    
    To prefix member variable name with m_.

2025-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Partition.h and .cc
    
    To applying the Include What You Use principle.  See this earlier commit
    for references [1].
    
    Partition.h
        #include <vector>            // For std::vector
    
    Partition.cc
        #include "Utils.h"           // For FS_UNALLOCATED
        #include <algorithm>         // For std::min()
        #include <vector>            // For std::vector
        #include <glibmm/ustring.h>  // For Glib::ustring
    
    [1] commit 3e689d9e563cb5372f64c801484b9e480fb18f87
        Add missing includes into Operation.h and .cc

2025-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to GParted_Core::m_all_libparted_flags
    
    Rename from 'flags' to give it a more meaningful name and prefix member
    variable with m_.  Also rename for loop counter variables to the
    normative 'i'.
    
    * Why do most of us use 'i' as a loop counter variable?
      https://softwareengineering.stackexchange.com/questions/86904/why-do-most-of-us-use-i-as-a-loop-counter-variable

2025-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert remaining calls to use get_lp_partition()
    
    When developing commit "Set LBA flag when creating extended partitions
    (#300)" set_partition_type() was newly handling extended partitions but
    was still directly calling ped_disk_get_partition_by_sector().  This
    resulted in GParted crashing when trying to set the partition type of an
    extended partition because it doesn't handle extended partitions.  This
    was resolved by calling GParted_Core::get_lp_partition() instead.
    
    None of the remaining direct calls to ped_disk_get_partition_by_sector()
    should ever have to handle extended partitions, so this change is not
    required, but for code consistency use GParted_Core::get_lp_partition()
    everywhere.  get_lp_partition() was added by commit [1].
    
    [1] commit 33a535390e00cf7de42ba2046e1a7093f426159f
        Extract common code into new method get_lp_partition()

2025-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove never reached return statement in GParted_Core::create()

2025-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary comment from Dialog_Partition_Copy::get_new_partition()
    
    The comment and two associated lines of code were added by commit [1] on
    2004-09-25.  5 commits later [2] on the same day the first commented
    statement was removed.  So now the first clause of the comment is not
    applicable any more and the second clause "set status for partition" is
    just repeating exactly what can be seen from the remaining statement
    itself and adds no additional information.  Therefore remove.
    
    [1] commit 201fdcb8e8ee8587775b79544ee3ff4bb87d8cd6
        more i18n and some code cleanups
                //set proper name and status for partition
            //  selected_partition.partition = String::ucompose( _("copy from %1"), selected_partition .partition );
                selected_partition.status = GParted::STAT_COPY ;
    
    [2] commit 60b5bb29aad0c29c78df8784c61c8961eb624a8e
        removed commented statement (big deal huh:) )

2025-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member functions to Dialog_*::get_new_partition()
    
    Change member function names to lower case to match the predominate
    "snake_case" [1] used for such names.
    
    [1] Naming convention (programming),
        Examples of multiple-word identifier formats
        https://en.wikipedia.org/wiki/Naming_convention_(programming)#Examples_of_multiple-word_identifier_formats

2025-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear all other flags when composing the operation in GParted (#300)
    
    Test case:
        Table   Partition num, FS, flag     Preview operation
        MSDOS   1   unknown      raid       Format to ext4
        GPT     1   linux-swap   swap       Paste fat16 into
        GPT     2   fat16        msftdata   Format to swap
    
    Preview of the format and paste into existing operations shows the
    existing partition flag being maintained, however when applied those
    flags are cleared and any new flags libparted uses to represent on-disk
    partition types are set.
    
    Make all operation which modify the partition flags behave the same.
    Make format and paste into existing preview as implemented and the same
    as create new and paste into new.  That all flags are cleared, other
    than any flag being explicitly set by GParted which might be one of:
    ESP, LVM or LBA.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear all flags when setting partition type by fstype (#300)
    
    Here are several examples of the same issue.  Have an existing partition
    on the relevant table with the specified libparted flag set and apply
    the operation to that partition.
        Table   Partition num, FS, flag     Apply operation
        MSDOS   1   unknown      raid       Format to ext4
        GPT     1   linux-swap   swap       Paste fat16 into
        GPT     2   fat16        msftdata   Format to swap
    
    In each case after refresh the existing partition flag was maintained
    even though the the type of the new file system was set using libparted.
    This is because the libparted flags are overriding the request being
    made by setting the partition's file system type in setting the on-disk
    partition type.
    
    So far set_filesystem_type_using_fstype() only clears the ESP and LVM
    flags.  Fix this by clearing all libparted partition flags when setting
    the on-disk partition type by file system type.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-11-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LBA flag when creating extended partitions (#300)
    
    Extended partitions on MSDOS tables still get created as type ID 0x05.
    As discussed in earlier commit "Set LBA flag for FAT16/32 file systems
    on MSDOS tables (#300)" the Parted command creates them with type ID
    0x0F "W95 Extended (LBA)".
    
    Set the LBA flag when creating extended partitions to get the partition
    type ID set to 0x0F.
    
    Updated operation details looks like:
        * Create Extended Partition #1 (extended, 64.00 MiB) on... (SUCCESS)
          * create empty partition                                 (SUCCESS)
    >>    * set partition type on /dev/sdb1                        (SUCCESS)
    >>        new partition flag: lba                              (SUCCESS)
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LBA flag when pasting FAT16/32 into new MSDOS partition (#300)
    
    Copy an existing FAT16/32 partition without the LBA flag set on an MSDOS
    drive into a new partition.  The operation previews and implements not
    setting the LBA flag.  Where as copying the same partition into an
    existing partition previews and implements as setting the LBA flag.
    
    Fix this so copying into a new partition also sets the partition flags
    consistently so when previewing and implementing this operation the LBA
    flag is set.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-11-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Provide second name for set_partition_type_using_flag() (#300)
    
    Libparted uses the file system type, overridden or modified by flags to
    set the on-disk partition type appropriately.  For example on an MSDOS
    table the libparted ESP flag sets the on-disk partition type ID to 0xEF
    "EFI System Partition", alternatively setting the file system type to
    "ext4" sets the on-disk partition type ID to 0x83 "Linux".  This is
    handled in GParted_Core::set_partition_type() by calling either:
        set_partition_type_using_flag()
        set_partition_type_using_fstype()
    
    Since the previous commit "Set LBA flag for FAT16/32 file systems on
    MSDOS tables (#300)" set_partition_type_using_flag() is also called in
    the set_partition_type_using_fstype() case to set the optional LBA flag
    and modify the on-disk partition type.  Conceptually these are two
    different things:
    1.  Set the libparted partition flag to override any file system type to
        set the on-disk partition type.
            E.g. (Partition type ID on an MSDOS table)
            ESP flag                       -> 0xEF "EFI System Partition"
    2.  Set the optional libparted partition flag when also setting the file
        system type to amend the on-disk partition type.
            E.g.
            FAT32 file system              -> 0x0B "W96 FAT32"
            FAT32 file system and LBA flag -> 0x0C "W96 FAT32 (LBA)"
    
    However both cases need to do exactly the same thing; create an
    operation detail to report what is being done and call the libparted API
    to set the flag.  Therefore rename
    GParted_Core::set_partition_type_using_flag() to set_partition_flag()
    and provide a function wrapper for the original name.  So in the first
    flag overrides the file system case continue to call
    set_partition_type_using_flag() and in the second set optional flag to
    modify the file system case call the new set_partition_flag() name.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LBA flag for FAT16/32 file systems on MSDOS tables (#300)
    
    A user requested that GParted set the LBA flag when creating FAT32 file
    systems.
    
    Libparted only supports the LBA flag for fat16 / fat32 and extended
    partitions on MSDOS partition tables [1] and no where else.  The Parted
    command always enables the LBA flag when it is available [2].  Therefore
    always creates these MSDOS partition types:
        Id  Type
        0E  W95 FAT16 (LBA)
        0C  W95 FAT32 (LBA)
        0F  W95 Extended (LBA)
    
    And testing of GNOME Disks shows it creates these MSDOS partition types
    and file systems:
        Id  Type             File System
        0C  W95 FAT32 (LBA)  fat16 [*]
        0C  W95 FAT32 (LBA)  fat32 [*]
        05  Extended         (None)
    [*] It doesn't appear possible to choose between fat16 and fat32 file
        systems.  Instead you just select a fat file system and it
        automatically chooses 16 or 32-bit FAT (File Allocation Table)
        depending on the size of the partition.
    
    Where as GParted, which doesn't set the LBA flag, always creates these
    MSDOS partition types and file systems:
        Id  Type       File System
        06  FAT16      fat16
        0B  W95 FAT32  fat32
        05  Extended   (None)
    
    Since there is precedent with the above mentioned partitioning tools
    always enabling the LBA flag and as Logical Block Addressing was first
    introduced in 1996 [3] enable the LBA flag.  This applies to these
    operations: create new, paste into existing and format for fat16/32 file
    systems in an MSDOS partition table.  If anybody is using MS-DOS before
    7.1 (included in Windows 95 Release 2) that doesn't support LBA
    addressing [4] the LBA flag can still be toggled off after the operation
    is applied.
    
    Now GParted creates these MSDOS partition types and file systems:
        Id  Type             File System
        0E  W95 FAT16 (LBA)  fat16
        0C  W95 FAT32 (LBA)  fat32
    
    Updated operation details looks like:
        * Create Primary Partition #1 (fat16, 64.00 MiB) on /de... (SUCCESS)
          * create empty partition                                 (SUCCESS)
          * clear old file system signatures in /dev/sdb1          (SUCCESS)
          * set partition type on /dev/sdb1                        (SUCCESS)
              new partition type: fat16                            (SUCCESS)
    >>        new partition flag: lba                              (SUCCESS)
          * create new fat16 file system                           (SUCCESS)
    
    [1] parted/libparted/labels/dos.c dos_type_id_supports_lba()
        https://cgit.git.savannah.gnu.org/cgit/parted.git/tree/libparted/labels/dos.c?h=v3.6#n226
            dos_type_id_supports_lba(unsigned char type_id)
            {
                switch (type_id)
                {
                    case PARTITION_FAT16:
                    case PARTITION_FAT16...
                    ...
                    case PARTITION_FAT32:
                    case PARTITION_FAT32...
                    ...
                    case PARTITION_DOS_EXT:
                    case PARTITION_EXT_LBA:
                        return true:
    
                    default:
                        return false:
                }
            }
    
    [2] parted/parted/parted.c do_mkpart()
        https://cgit.git.savannah.gnu.org/cgit/parted.git/tree/parted/parted.c?h=v3.6#n850
            static int
            do_mkpart (PedDevice** dev, PedDisk** diskp)
                ...
                if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
                    ped_partition_set_flag (part, PED_PARTITION_LBA, 1);
    
    [3] Hard Disks
        https://www.dosdays.co.uk/topics/hard_disks.php
            Hard Disk Capacities Over the Years
            Year  Capacity         Information
            1996  300 MB - 1.5 GB  Introduced LBA (Logical Block Addressing)
                                   for larger drives up to 8.4 GB
    
    [4] MS-DOS 7/8 (as part of Windows 9x)
        https://en.wikipedia.org/wiki/MS-DOS#MS-DOS_7/8_(as_part_of_Windows_9x)
            * MS-DOS 7.1 was included in Windows 95's OEM Service Release 2
              through Windows 98 Second Edition.  It added support for the
              FAT32 file system and logical block addressing (LBA)
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Consolidate setting of libparted partition flags (#300)
    
    After merge request !146 [1] addressing issue #288 [2], code
    implementing rules setting and clearing the ESP and LVM libparted
    partition flags ended up in multiple methods for each relevant
    operation.  However all the rules are compatible so merge merge them
    into a single function and call as necessary.
    
    [1] !146 - Maintain EFI System Partition type when copying to new
        partition
        https://gitlab.gnome.org/GNOME/gparted/-/merge_requests/146
    [2] #288 - GPT partition type GUID (code) does not get copied in
        partition copy & paste feature
        https://gitlab.gnome.org/GNOME/gparted/-/issues/288
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-02  Aurimas Aurimas Černius <aurimas.cernius@mailo.com>

    Update Lithuanian translation

2025-11-29  Emin Tufan Çetin <etcetin@gmail.com>

    Update Turkish translation

2025-10-26  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Update Serbian translation

2025-10-22  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2025-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also update unit test code to new closing namespace comment style

2025-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update to new closing namespace comment style
    
    Use a new closing namespace comment style everywhere.  Follows what the
    Gtkmm source code does:
        $ egrep -rh '}.*//' /usr/include/gtkmm-3.0/ | sort | uniq -c | fgrep -v ' 1 ' | sort -n
              2 }  //namespace Gtk
              2 } // namespace TreeView_Private
             58 } //namespace Gtk
            145 } //namespace Glib
            147 } // namespace Glib
            521 } // namespace Gtk

2025-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor linux_swap::read_uuid() into if fail return early

2025-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor linux_swap::read_label() into if fail return early

2025-08-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor linux_swap::set_used_sectors() into if fail return early
    
    ... code pattern.  This is to make the code easier to understand by not
    having to remember multiple condition context for multiple levels of
    indented code.

2025-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Erase file system signatures before all FS copies (#297)
    
    Two further test cases:
    1. Copy EXFAT over NILFS2 in a larger partition
       Partition is unrecognised because it contains signatures for 2
       different file systems which neither blkid nor parted report as
       recognised.
    2. Copy FAT32 over BCACHEFS in a larger partition
       Partition is recognised as FAT32 by parted but it contains signatures
       for 2 different file systems.
    
    These test cases use GParted internal block copy to copy the source
    partition over a larger destination partition so all sectors are
    overwritten up to the size of the smaller source partition.  Then, when
    supported, which is FAT32 only for these tests, the file system is grown
    to fill the larger partition.  The overwritten file systems of NILFS2
    and BCACHEFS were chosen because they contain signatures at the
    beginning and end of the partition.
    
    Test case 1: Copy EXFAT over NILFS2 in a larger partition
    Before:
        # wipefs /dev/sdb1
        DEVICE OFFSET TYPE  UUID      LABEL
        sdb1   0x3    exfat 6AE6-4A1B Source
        sdb1   0x1fe  dos
    
        # wipefs /dev/sdb2
        DEVICE OFFSET     TYPE   UUID                                 LABEL
        sdb2   0x406      nilfs2 0fb3907a-e8ab-4d86-8781-8feb7334dfc3 Overwritten
        sdb2   0x1ffff006 nilfs2 0fb3907a-e8ab-4d86-8781-8feb7334dfc3 Overwritten
    
    After:
        # wipefs /dev/sdb2
        DEVICE OFFSET     TYPE   UUID                                 LABEL
        sdb2   0x1ffff006 nilfs2 0fb3907a-e8ab-4d86-8781-8feb7334dfc3 Overwritten
        sdb2   0x3        exfat  6AE6-4A1B                            Source
        sdb2   0x1fe      dos
    
        # blkid /dev/sdb2
        # echo $?
        2
    
        # parted /dev/sdb unit s print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 16777216s
        Sector size (logical/physical): 512B/512B
        Partition Table: gpt
        Disk Flags:
    
        Number  Start    End       Size      File system  Name  Flags
         1      2048s    657407s   655360s                      msftdata
         2      657408s  1705983s  1048576s                     msftdata
    
    Two different signatures afterwards which neither blkid nor parted
    report as recognised.
    
    Test case 2: Copy FAT32 over BCACHEFS in a larger partition
    Before:
        # wipefs /dev/sdb1
        DEVICE OFFSET TYPE UUID      LABEL
        sdb1   0x52   vfat C1E7-9353 SOURCE
        sdb1   0x0    vfat C1E7-9353 SOURCE
        sdb1   0x1fe  vfat C1E7-9353 SOURCE
    
        # wipefs /dev/sdb2
        DEVICE OFFSET     TYPE     UUID                                 LABEL
        sdb2   0x1018     bcachefs bfbb6290-5237-49d5-b323-4161139bf2a5 Overwritten
        sdb2   0x1ff00018 bcachefs bfbb6290-5237-49d5-b323-4161139bf2a5 Overwritten
    
    After:
        # wipefs /dev/sdb2
        DEVICE OFFSET     TYPE     UUID                                 LABEL
        sdb2   0x1ff00018 bcachefs bfbb6290-5237-49d5-b323-4161139bf2a5 Overwritten
        sdb2   0x52       vfat     C1E7-9353                            SOURCE
        sdb2   0x0        vfat     C1E7-9353                            SOURCE
        sdb2   0x1fe      vfat     C1E7-9353                            SOURCE
    
        # blkid /dev/sdb2
        # echo $?
        2
    
        # parted /dev/sdb unit s print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 16777216s
        Sector size (logical/physical): 512B/512B
        Partition Table: gpt
        Disk Flags:
    
        Number  Start    End       Size      File system  Name  Flags
         1      2048s    657407s   655360s   fat32              msftdata
         2      657408s  1705983s  1048576s  fat32              msftdata
    
    Two different signatures afterwards, blkid doesn't recognise it however
    parted recognises it as FAT32.
    
    So at least FAT32 grow doesn't clear signatures in space the file system
    is being grown into.  And if the file system doesn't support being grown
    or that support is not available then again previous signatures in the
    extra space are not cleared.  Therefore the partition contains multiple
    different file system signatures which may result in the last written
    file system not being recognised.  Fix this by erasing all signatures
    before all file system copies, whether using the GParted internal block
    copy or FS specific copy commands.
    
    Closes #297 - Copied EXT2/3/4 FS into existing FAT16/32 partition is
                  unrecognised

2025-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Erase file system signatures before FS specific copy method (#297)
    
    Copy an EXT2/3/4 file system into an existing partition containing a
    FAT16/32 file system.  After applying and refreshing GParted reports the
    partition as unrecognised.
    
    Initial signatures of EXT4 in sdb1 and FAT32 in sdb2:
        # wipefs /dev/sdb1
        DEVICE OFFSET TYPE UUID                                 LABEL
        sdb1   0x438  ext4 0a2df8eb-63d9-4467-83d6-9ecf2c1d95af Source
    
        # wipefs /dev/sdb2
        DEVICE OFFSET TYPE UUID      LABEL
        sdb2   0x52   vfat F986-9BA0 OVERWRITTEN
        sdb2   0x0    vfat F986-9BA0 OVERWRITTEN
        sdb2   0x1fe  vfat F986-9BA0 OVERWRITTEN
    
    Operation details reporting successful copy of sdb1 (EXT4) into sdb2:
        * Copy /dev/sdb1 to /dev/sdb2                              (SUCCESS)
          * calibrate /dev/sdb1                                    (SUCCESS)
          * calibrate /dev/sdb2                                    (SUCCESS)
          * set partition type on /dev/sdb2                        (SUCCESS)
          * copy file system from /dev/sdb1 to /dev/sdb2           (SUCCESS)
            * e2image -ra -p '/dev/sdb1' '/dev/sdb2'               (SUCCESS)
                e2image 1.47.2 (1-Jan-2025)
                Scanning inodes...
                Copied 26717 / 26717 blocks (100%) in 00:00:01 at 26.09 MB/s
          * check file system on /dev/sdb2 for errors and (if p... (SUCCESS)
    
    Afterwards sdb2 contains signatures of both FAT32 and EXT4:
        # wipefs /dev/sdb2
        DEVICE OFFSET TYPE UUID                                 LABEL
        sdb2   0x52   vfat F986-9BA0
        sdb2   0x0    vfat F986-9BA0
        sdb2   0x1fe  vfat F986-9BA0
        sdb2   0x438  ext4 0a2df8eb-63d9-4467-83d6-9ecf2c1d95af Source
    
    But neither blkid nor parted (libparted) recognise the contents of sdb2,
    therefore neither does GParted:
        # blkid /dev/sdb2
        # echo $?
        2
    
        # parted /dev/sdb unit s print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 16777216s
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
        Disk Flags:
    
        Number  Start    End       Size     Type     File system  Flags
         1      2048s    526335s   524288s  primary  ext4
         2      526336s  1050623s  524288s  primary
    
    e2image copied only the used blocks of the EXT4 file system from sdb1
    into sdb2 which left the FAT32 signatures in sector 0 intact hence the
    above result.
    
    Also have the same issue with copying any EXT2/3/4 file system over the
    top of XFS because that also has it's signature in sector 0 which is not
    overwritten by the copy e2image implements.
        # wipefs /dev/sdb2
        DEVICE OFFSET TYPE UUID                                 LABEL
        sdb2   0x0    xfs  9f2e2cc1-82ee-4000-9742-a54c3e35548b Overwritten
        sdb2   0x438  ext4 5ac22fa1-e678-478a-9f85-8b313f577f5c Source
    
    As external file system specific copy commands are free to implement
    whatever they choose GParted can't depend on them erasing old signatures
    before or as part of copying the new file system data.  Therefore
    GParted needs to erase all signatures before hand, just like it already
    does before creating a new file system as part of the Create and Format
    operations [1].
    
    [1] commit 3c75f3f5b103bc158b0f70ea63459aa362b0bab8
        Use wipefs to clear old signatures before creating new file systems
        (#688882)
    
    Closes #297 - Copied EXT2/3/4 FS into existing FAT16/32 partition is
                  unrecognised

2025-10-13  Sergej A. <asvmail.as@gmail.com>

    Update Russian translation

2025-10-10  Juliano de Souza Camargo <julianosc@protonmail.com>

    Update Brazilian Portuguese translation

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix spelling mistake in help/Makefile.am comment

2025-09-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update screenshot md5sum in the gd, sl and te Manual translations (!152)
    
    These 4 translations of the GParted Manual don't have an existing
    screenshot:
        Code   Language           GParted Manual percentage translated [1]
        gd     Scottish Gaelic    14%
        sl     Slovenian           0%
        te     Telugu             10%
        th     Thai                0%
    
    However 3 of their PO (Portable Object) files do have the md5sum of the
    file help/C/figures/gparted_window.png so update that with the new hash.
    
    [1] The GNOME Project Translation Platform > Modules > gparted
        https://l10n.gnome.org/module/gparted/
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Updated Ukrainian screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Updated Swedish screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Updated Serbian (Latin) screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Updated Serbian screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Russian screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Updated Romanian screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Brazilian Portuguese screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Italian screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Indonesian screenshot for the translated Manual (!152)
    
    As noted earlier the Indonesian screenshot was a symbolic link to the C
    locale screenshot.
        $ ls -l help/id/figures/gparted_window.png
        lrwxrwxrwx. ... help/id/figures/gparted_window.png -> ../../C/figures/gparted_window.png
    
    This displayed the English screenshot in the Indonesian GParted Manual
    and caused a warning against the translation in the GNOME translation
    website [1][2].  The GParted application and GParted Manual are well
    translated to Indonesian, 100% and 98% respectively.  Therefore provide
    an Indonesian screenshot.
    
    [1] The GNOME Project Translation Platform > Modules > gparted
        https://l10n.gnome.org/module/gparted/
    
    [2] gparted > master > Indonesian [User Guide]
        https://l10n.gnome.org/vertimus/gparted/master/help/id/
            /!\ Figures should not be copied when identical to original
            (/var/www/damnedlies/data/scratchdir/git/gparted/help/id/figures/gparted_window.png).
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update French screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Spanish screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Greek screenshot for the translated Manual (!152)
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update German screenshot for the translated Manual (!152)
    
    Note that the German translation PO (Portable Object) file uses a
    different (older?) style of referencing the external image [1] compared
    to that used in the Czech translation.  As a result the GNOME website
    marks the image as fuzzy instead of translated [2][3][4].
    
    All these GParted Manual translations use the same "@@image:" style of
    referencing the external image and all report the translation of the
    image as fuzzy whether the image exists or not!
        Code       Language          Image           Translation
        de         German            exists          fuzzy
        el         Greek             exists          fuzzy
        gd         Scottish Gaelic   doesn't exist   fuzzy
        it         Italian           exists          fuzzy
        sl         Slovenian         doesn't exist   fuzzy
        sr         Serbian           exists          fuzzy
        sr@latin   Serbian (Latin)   exists          fuzzy
        te         Telugu            doesn't exist   fuzzy
    
    Getting the [Current translated file (PO)] from the gparted > master >
    German page [2] provides a reformatted file that looks like it would
    remove the fuzzy status of the image translation.  However it reformats
    the whole file generating this level of change:
        1857 insertions(+), 915 deletions(-)
    Changes include updating itstool comments, re-ordering translations and
    re-line wrapping source and translated text.  Expect that this shouldn't
    affect the translation but it seems like something that should be left
    to the translation teams to perform and verify.
    
    So just update German screenshot and the md5sum hash of the C locale
    screenshot in the German PO file.
    
    [1] GParted German PO file
        help/de/de.po
            #. When image changes, this message will be marked fuzzy or
            #. untranslated for you. It doesn't matter what you translate it
            #. to: it's not used at all.
            #: C/gparted.xml:382(None)
            msgid ""
            "@@image: 'figures/gparted_window.png'; md5=0c6eb27cd7d5d614b4ea752846ccb50b"
            msgstr "translated"
    
    [2] gparted > master > German
        https://l10n.gnome.org/vertimus/gparted/master/help/de/
            including 0/1/0 image   [Translated/Fuzzy/Untranslated]
    
    [3] User Guide (German), Figures translation status
        https://l10n.gnome.org/module/gparted/help/master/de/images/
    
    [4] gparted > master > German > Differences for fuzzy strings
        https://l10n.gnome.org/vertimus/stats/31689/msgiddiff/
            512#, fuzzy
                -@@image: 'figures/gparted_window.png'; md5=0c6eb27cd7d5d614b4ea752846ccb50b
                +msgctxt "_external ref='figures/gparted_window.png' md5='0c6eb27cd7d5d614b4ea752846ccb50b'
            525msgctxt "_"
            526msgid ""
            527"external ref='figures/gparted_window.png' "
            528"md5='0c6eb27cd7d5d614b4ea752846ccb50b'"
            529msgstr "translated"
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Czech screenshot for the translated Manual (!152)
    
    Also update the Czech PO (Portable Object) file with the md5sum of the
    new C locale screenshot to indicate that the screenshot has been
    translated [1][2].
    
    [1] GParted Czech PO file
        help/cs/cs.po
            #. (itstool) path: imageobject/imagedata
            #. This is a reference to an external file such as an image or
            #. video. When the file changes, the md5 hash will change to let
            #. you know you need to update your localized copy. The msgstr
            #. is not used at all. Set it to whatever you like once you have
            #. updated your copy of the file.
            #: C/index.docbook:382
            msgctxt "_"
            msgid ""
            "external ref='figures/gparted_window.png' "
            "md5='0c6eb27cd7d5d614b4ea752846ccb50b'"
            msgstr ""
            "external ref='figures/gparted_window.png' "
            "md5='0c6eb27cd7d5d614b4ea752846ccb50b'"
    
    [2] ITS Tool > Documentation > ITS Data Categories
        https://itstool.org/documentation/its.html
            External Resource
    
            ITS Tool creates a PO message for each translatable external
            resource.  It does not attempt to parse external resources or
            put their contents into PO files.  Rather, it calculates an MD5
            checksum for each resource and puts that in the PO file message
            along with the resource URI.  ITS Tool uses the special msgctxt
            "_" for all special messages that don't correspond to text in
            the XML document.
    
            For example, the built-in Mallard ITS rules contain the
            following:
    
                <itst:externalResourceRefRule selector="//mal:media"
                  externalResourceRefPointer="@src"/>
    
            Here is an example of the output:
    
                msgctxt "_"
                msgid "external ref='nautilus.png' md5='cbc3bbf0d998ed7a6567eb3b0c402195'"
                msgstr ""
    
            Translators can set the msgstr to anything they like to specify
            that they've created a localized copy of the file.  The actual
            msgstr doesn't matter.  It's only for tracking purposes.  When
            new external files are added, new messages will be added.  When
            existing files change, their MD5 checksums will change, causing
            the msgid to change.  This tells translators they need to update
            their localized copy of the file.
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update main window screenshot in the GParted Manual (!152)
    
    The screenshots on the website (https://gparted.org/screenshots.php)
    were recently updated using the latest GParted application version and
    to have a consistent look by all having been taken on the same desktop
    environment.  Now update the main window screenshots in the GParted
    Manual and its translations to match.
    
    The screenshots were taken on a Fedora 42 VM with XFCE desktop.  The
    default application font and window title font were set to Cantarell
    Regular 11 and Cantarell Bold 11 respectively.  (This font was chosen
    for clarity and because it matches the font used in GNOME 3 and GNOME 4,
    before release 48).
    
    Run GParted in each language and capture the screenshots thus:
        ...
        $ sudo make install
        $ LANGUAGE=C sudo gparted
    Take screenshot and quit app.
    (The default main window size was 775 x 500 pixels, 785 x 534 with
    window manager decoration).
    
        $ LANGUAGE=el sudo gparted
    If necessary, make the GParted window wide enough to show all columns.
    The Greek translation had the longest column heading names and needed
    the widest main window.  Take screenshot and quit app.
    (Main window screenshot in Greek with window manager decoration was
    905 x 534 pixels).
    
    Repeat for each translation of the GParted Manual with a screenshot.
        $ ls -l help/*/figures/gparted_window.png
    
    Note that the Indonesian translation explicitly (committed in git [1])
    has it's screenshot symlinked to the C locale copy, so the Indonesian
    translation of the GParted Manual displayed the English screenshot.
        $ ls -l help/id/figures/gparted_window.png
        lrwxrwxrwx. ... help/id/figures/gparted_window.png -> ../../C/figures/gparted_window.png
    
    The GParted application and GParted Manual are both well translated to
    Indonesian.  Therefore also provide an updated Indonesian screenshot for
    the Manual.
    
    The GParted Manual has a comment [2] that the GNOME Document Style Guide
    [3] recommends a maximum image width of 510 pixels.  However that
    document no longer appears to exist on the GNOME web site.  The nearest
    found current document was the Developer Documentation Style Guidelines
    [4] but that doesn't mentions anything about screenshots.
    
    Having a screenshot as close to it's original size as possible makes the
    text easier to read.  Therefore determine the maximum image size
    ourselves.  Use the Greek screenshot, as it's the widest one, so all
    screenshots are resized by the same percentage for consistency.  Copy
    the image into the installed GParted Manual:
        $ cd ~/Pictures
        $ sudo cp gparted_window.el.png /usr/local/share/help/C/gparted/figures/gparted_window.png
        $ sudo cp gparted_window.el.png /usr/local/share/help/el/gparted/figures/gparted_window.png
    
    And view the English and Greek manuals:
        $ LANGUAGE=C yelp help:gparted
        $ LANGUAGE=el yelp help:gparted
    
    With trial and error found that the largest possible size for the Greek
    screenshot was 70% (width 634 pixels).  Larger than this then when yelp
    rendered the page for printing to A4 it had to scale down the contents
    to make the image fit, which also shrank the Manual's text.  Choose A4
    paper (width 210 mm) as it's slightly narrower that US letter (width 8.5
    inches, ~216 mm).  Viewed on a screen the yelp window can be narrowed to
    800 pixels and the GParted screenshot is still fully displayed.
    
    Resize all the screenshots in place to 70% using this GraphicsMagick
    command:
        $ cd ~/Pictures
        $ gm mogrify -filter Sinc -resize 70% gparted_window.*.png
    
    Evaluated all the filters GraphicsMagick provides and found that Sinc
    provided the clearest text in the shrunk screenshots.
    
    This commit just updates the C locale screenshot and the comment in the
    Manual with the discovered maximum image width.
    
    [1] commit f250697c58268c92e8c3bff74145c23bb6133ed5
        Add initial Indonesian translation of help (!90)
    
    [2] commit 8bc1377c2232934eb50bcb84454560312b9acbc9
        Add comment for documentation maximum image width recommendation
    
    [3] GNOME Documentation Style Guide V1.6, 10.3 Image Width
        http://web.archive.org/web/20210306042742/https://developer.gnome.org/gdp-style-guide/stable/screenshot-4.html.en
            The maximum image width is 510 pixels.  At this width, images
            fit on a printed page.  You might need to scale down the image
            before you add any callouts, to ensure that the total width of
            the image is less than 510 pixels.  You can use GIMP to scale
            images before you add callouts.  To scale an image in GIMP,
            right-click on the image, then choose Image > Scale image.
    
    [4] Developer Documentation Style Guidelines
        https://developer.gnome.org/documentation/guidelines/devel-docs.html
    
    Closes !152 - Update main window screenshot in the GParted Manual and
                  its translations

2025-09-30  luming zh <lumingzh@qq.com>

    Update Chinese (China) translation

2025-09-29  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2025-09-29  Martin <miles@filmsi.net>

    Update Slovenian translation

2025-09-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix spelling mistake in Dialog_Partition_New::set_data() comment

2025-06-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify setting the about copyright message
    
    In preparing the variable passed to Gtk::AboutDialog::set_copyright()
    the code did the following:
    1.  Default construct empty std::string
    2.  Copy assign from first string literal
    3.  Operator plus with second string literal
    4.  Operator plus with third string literal
    5.  Construct temporary Glib::ustring from std::string in order to pass
        to set_copyright() which only takes a Glib::ustring [1]
    
    Simplify to:
    1. Construct temporary Glib::ustring from string literal
       (The compiler having concatenated adjacent string literals)
    
    [1] [Gtkmm 3.24] gtkmm: Gtk::AboutDialog Class Reference
        https://web.archive.org/web/20210306115632/https://developer.gnome.org/gtkmm/3.24/classGtk_1_1AboutDialog.html#a3a7889f5da5f0d92495628fa9d67580a
            void Gtk::AboutDialog::set_copyright(const Glib::ustring & copyright)

2025-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Dialog_Partition_Resize_Move.cc
    
    Dialog_Partition_Resize_Move.cc
        +#include <gdkmm/rgba.h>      // For Gtk::RGBA
        +#include <glibmm/ustring.h>  // For Glib::ustring
        +#include <glib.h>            // For g_assert()

2025-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Dialog_Partition_New.h and .cc
    
    Applying the Include What You Use principle.
    
    Dialog_Partition_New.h
        +#include "FileSystem.h"   // For FS
        +#include <gtkmm/entry.h>  // For Gtk::Entry
        +#include <vector>         // For std::vector
    
    Dialog_Partition_New.cc
        +#include <gdkmm/rgba.h>    // For Gdk::RGBA
        +#include <gtkmm/widget.h>  // For Gtk::Widget
        +#include <glib.h>          // For g_assert()
        +#include <vector>          // For std::vector

2025-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Dialog_Partition_Copy.cc
    
    Apply the Include What You Use principle.
    
    Dialog_Partition_Copy.cc
        +#include <glibmm/ustring.h>  // For Glib::ustring
        +#include <gdkmm/rgba.h>      // For Gdk::RGBA
        +#include <glib.h>            // For g_assert()

2025-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Assert m_frame_resizer_base is not nullptr before dereferencing

2025-09-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update includes in Dialog_Base_Partition.h and .cc
    
    More work to apply Include What You Use principle.  See this earlier
    commit for references [1].  Must include GLib's top-level header
    <glib.h> for g_assert() [2].
    
    Dialog_Base_Partition.h
        +#include "Utils.h"         // For typedef Sector
        -#include <gtkmm/stock.h>   // Don't use Gtk::*Stock*
        +#include <gtkmm/button.h>  // For Gtk::Button
    
    Dialog_Base_Partition.cc
        +#include <gtkmm/box.h>     // For Gtk::Box
        +#include <gtkmm/dialog.h>  // For Gtk::RESPONSE_*
        +#include <gtkmm/enums.h>   // For Gtk::ORIENTATION_*
        +#include <gtkmm/image.h>   // For Gtk::Image
        +#include <gtkmm/stock.h>   // For Gtk::Stock::*
        +#include <gtkmm/widget.h>  // For Gtk::Widget
        +#include <glib.h>          // For g_assert()
    
    [1] commit 3e689d9e563cb5372f64c801484b9e480fb18f87
        Add missing includes into Operation.h and .cc
    
    [2] [glib 2.32.0] README.in
        https://gitlab.gnome.org/GNOME/glib/-/blob/2.32.0/README.in?ref_type=tags#L70
            Notes about GLib 2.32
            =====================
            ...
            * It is now mandatory to include glib.h instead of individual
              headers.

2025-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Base_Partition::m_new_partition

2025-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Base_Partition::m_frame_resizer_base
    
    A little bit more work towards having member variables start with m_ to
    make it abundantly clear that they are members of a class.

2025-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now empty Dialog_Partition_Copy and _Resize_Move destructors (!151)
    
    Because it's recommended to not provide an empty destructor [1], instead
    let the compiler generate the destructor automatically.  Done previously
    for other classes by commit [2].
    
    [1] C++ Core Guidelines, C.dtor: Destructors
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cdtor-destructors
            C.dtor: Destructors
    
            "Does this class need a destructor?" is a surprisingly
            insightful design question.  For most classes the answer is "no"
            either because the class holds no resources or because
            destruction is handled by the rule of zero; that is, its members
            can take care of themselves as concerns destruction.  If the
            answer is "yes", much of the design of the class follows (see
            the rule of five).
    
            C.30: Define a destructor if a class needs an explicit action at
            object destruction
    
            Reason: A destructor is implicitly invoked at the end of an
            object's lifetime.  If the default destructor is sufficient, use
            it.  Only define a non-default destructor if a class needs to
            execute code that is not already part of its members'
            destructors.
    
    [2] commit 4168772d3a589a2f68181238a9e945a4e079079b
        Remove most of the empty class destructors (!143)
    
    Closes !151 - Convert Dialog_Base_Partition to use smart pointers

2025-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert Dialog_Base_Partition::new_partition to unique_ptr (!151)
    
    Closes !151 - Convert Dialog_Base_Partition to use smart pointers

2025-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert Dialog_Base_Partition::frame_resizer_base to unique_ptr (!151)
    
    A little bit more conversion of raw pointers to smart pointers to
    represent ownership.  See these previous commits for multiple references
    about how and why to use smart pointers:
    
    *   commit 13f90722e5ae4cfc3b42067edc80d996f8396994
        Convert GParted_Core::supported_filesystems to unique_ptr (!143)
    
    *   commit 56cd0fb21a0d44466f03ad22b95b2cb428e9d2ef
        Convert ownership of Operation objects to unique_ptr (!145)
    
    Closes !151 - Convert Dialog_Base_Partition to use smart pointers

2025-09-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove "v1.41+" from required ext4 software string (#295)
    
    As detailed in the previous commit message the oldest supported
    distributions use much newer versions of e2fsprogs than 1.41.  Therefore
    remove "v1.41+" from the required ext4 software string.
    
    Closes #295 - GParted should not disable 64bit feature of ext4 file
                  systems it creates

2025-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove conditional size limit of ext4 file systems (#295)
    
    GParted conditionally sets the maximum size of an ext4 file system to
    just less than 16 TiB if e2fsprogs < 1.42.9 was found.  All the oldest
    supported distributions have a much newer version of e2fsprogs (with
    ext4 64-bit support):
    
        Distribution       EOL        mke2fs -V
        Debian 11          2026-Aug   1.46.2 (28-Feb-2021)
        RHEL 8             2029-Jul   1.45.6 (20-Mar-2020)
        SLES 15 SP7        2031-Jul   1.47.0 (05-Feb-2023) [1]
        Ubuntu 22.04 LTS   2027-Apr   1.46.5 (30-Dec-2021)
    
    The ext4 maximum file system size is 2^64 - 1 file system blocks [2].
    With a 4 KiB block size that is just less than 64 ZiB (64 * 1024^7).
    Much larger than can be represented in the 64-bit signed int number of
    bytes in m_fs_limits.max_size.  From a GParted point of view this is
    unlimited.  Therefore remove the conditional size limit for ext4 file
    systems.
    
    [1] SUSE package search: SLES 15 SP7, e2fsprogs
        https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=15.7&arch=x86_64&query=e2fsprogs&module=
    
    [2] ext4 Data Structures and Algorithms, 2.1. Blocks
        https://docs.kernel.org/filesystems/ext4/blocks.html
    
    Closes #295 - GParted should not disable 64bit feature of ext4 file
                  systems it creates

2025-09-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop disabling 64-bit on ext4 file systems < 16 TiB (#295)
    
    Debian bug #1110494 "GParted deactivates ext4 64bit features by default
    during format" [1] says that GParted should not disable that feature.
    
    The 64bit feature enables:
    1.  File systems to be larger than 2^32 file system blocks (16 TiB for
        4 KiB block size) [2].
    2.  Improved metadata checksumming safety [3].
    
    Disabling the 64bit feature was added into GParted in June 2016 [4] when
    ext4 file systems were created as 64-bit by default, but GRUB 2 and
    Syslinux boot loaders didn't support booting from 64-bit ext4 file
    systems.
    
    Since then support for the ext4 64bit feature has been added into GRUB
    2.02 [5].  Syslinux repository includes commit "ext4: Fix 64bit feature"
    [6] but there's been no release since, so each distribution's package
    has to be checked for the patch.
    
    The oldest supported distributions have versions of GRUB 2 and Syslinux
    packages which includes support for 64-bit ext4.
    
        Distribution       EOL        grub2-install   syslinux package
                                      --version       includes ext4 64bit fix
    
        Debian 11          2026-Aug   2.06            Yes [7]
        RHEL 8             2029-Jul   2.02            Yes [8]
        SLES 15 SP7        2031-Jul   2.12 [9]        Unknown
        Ubuntu 22.04 LTS   2027-Apr   2.06            Yes [10]
    
    Therefore remove the GParted ext4 auto 64bit feature, letting mkfs.ext4
    always enable 64-bit support by default.
    
    [1] Debian bug #1110494 - GParted deactivates ext4 64bit features by
        default during format
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1110494
    
    [2] ext4(5) - Linux manual page
        https://man7.org/linux/man-pages/man5/ext4.5.html#FILE_SYSTEM_FEATURES
            64bit
                Enables the file system to be larger than 2^32 blocks.
    
    [3] ext4 Data Structures and Algorithms, 2.5. Checksums
        https://docs.kernel.org/filesystems/ext4/checksums.html
            Starting in early 2012, metadata checksums were added to all
            major ext4 and jbd2 data structures.  The associated feature
            flag is metadata_csum.  The desired checksum algorithm is
            indicated in the superblock, though as of October 2012 the only
            supported algorithm, is crc32c.  Some data structures did not
            have space to fit a full 32-bit checksum, so only the lower 16
            bits are stored.  Enabling the 64bit feature increases the data
            structure size so that full 32-bit checksums can be stored for
            many data structures.
    
    [4] cc7e412bc6ec2e27d049438d2a5d4cf2548cbaae
        Only enable ext4 64bit feature when required (#766910)
    
    [5] [GRUB 2.02] NEWS
        https://cgit.git.savannah.gnu.org/cgit/grub.git/tree/NEWS?h=grub-2.02
            New in 2.02
            * New/improved filesystem and disk support:
              * Experimental 64-bit ext2 support.
    
    [6] [Syslinux] ext4: Fix 64bit feature
        https://github.com/geneC/syslinux/commit/af7e95c32cea40c1e443ae301e64b27f068b4915
    
    [7] [Debian Bullseye (11) syslinux package] Debian Changelog
        https://packages.debian.org/bullseye/syslinux
            * Add patch 0018-ext4-Fix-64bit-feature.patch from upstream to
              support ext4 64bit feature (Closes: #833057).
    
    [8] [Rocky Linux 8 copy of RHEL 8 syslinux package source]
        syslinux / SPECS / syslinux.spec
        https://git.rockylinux.org/staging/rpms/syslinux/-/blob/imports/r8/syslinux-6.04-4.el8/SPECS/syslinux.spec?ref_type=tags#L288
            * Sun Nov 26 2017 ... - 6.04-0.7
            - Add upstream patch for ext4 64bit feature (#1369934)
    
    [9] SUSE package search: SLES 15 SP7, grub2
        https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=15.7&arch=x86_64&query=grub2&module=
    
    [10] [Ubuntu 22.04 LTS syslinux package] Ubuntu Changelog
        https://changelogs.ubuntu.com/changelogs/pool/main/s/syslinux/syslinux_6.04~git20190206.bf6db5b4+dfsg1-3ubuntu1/changelog
            * Add patch 0018-ext4-Fix-64bit-feature.patch from upstream to
              support ext4 64bit feature (Closes: #833057).
    
    Closes #295 - GParted should not disable 64bit feature of ext4 file
                  systems it creates

2025-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't attempt to convert ext4 to 64-bit when already 64-bit (#295)
    
    After applying the previous commit and successfully converting the ext4
    file system to 64-bit and growing it to 16.01 TiB, try to grow the file
    system again.  This appears to succeed:
        Grow /dev/loop0p1 from 16.01 TiB to 16.99 TiB              (SUCCESS)
        * calibrate /dev/loop0p1                                   (SUCCESS)
        * check file system on /dev/loop0p1 for errors and (if ... (SUCCESS)
        * grow partition from 16.01 TiB to 16.99 TiB               (SUCCESS)
        * grow file system to fill the partition                   (SUCCESS)
          * resize2fs -p -b '/dev/loop0p1'                         (SUCCESS)
              resize2fs 1.45.6 (20-Mar-2020)
              The filesystem is already 64-bit.
    
    But on refresh it is clear the partition was grown but the file system
    was not because there was nearly 1 TiB of unallocated space.  Resize2fs
    wrote message "The filesystem is already 64-bit" to stderr, but returned
    exit status 0.
    
    Fix this by querying the ext4 file system features and only adding the
    -b (convert to 64-bit) option when the file system is not already
    64-bit.
    
    Closes #295 - GParted should not disable 64bit feature of ext4 file
                  systems it creates

2025-09-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert ext4 file system to 64-bit when growing >= 16 TiB (#295)
    
    So far GParted creates ext4 file systems smaller than 16 TiB explicitly
    without 64-bit support [1].  However an ext4 file system can't be
    resized >= 16 TiB without 64-bit support.  Attempting to grow such a
    file system fails like this:
        Grow /dev/loop0p1 from 15.99 TiB to 16.01 TiB              (ERROR)
        * calibrate /dev/loop0p1                                   (SUCCESS)
        * check file system on /dev/loop0p1 for errors and (if ... (SUCCESS)
        * grow partition from 15.99 TiB to 16.01 TiB               (SUCCESS)
        * grow file system to fill the partition                   (ERROR)
          * resize2fs -p '/dev/loop0p1'                            (ERROR)
              resize2fs 1.45.6 (20-Mar-2020)
              resize2fs: New size too large to be expressed in 32 bits
    
    Fix this by making resize2fs convert the ext4 file system to 64-bit
    while growing it to 16 TiB or larger [2][3].
    
    Also note that an ext4 file system can be grown while it's mounted, but
    it can't be converted from 32-bit to 64-bit while mounted.  Resize2fs
    writes a useful message and returns a non-zero exit status so GParted
    doesn't need any additional coding to handle this case.  Looks like:
        Grow /dev/loop0p1 from 15.99 TiB to 16.01 TiB              (ERROR)
        * calibrate /dev/loop0p1                                   (SUCCESS)
        * grow partition from 15.99 TiB to 16.01 TiB               (SUCCESS)
        * grow file system to fill the partition                   (ERROR)
          * resize2fs -p -b '/dev/loop0p1'                         (ERROR)
              resize2fs 1.45.6 (20-Mar-2020)
              Cannot change the 64bit feature while the filesystem is mounted.
    
    [1] cc7e412bc6ec2e27d049438d2a5d4cf2548cbaae
        Only enable ext4 64bit feature when required (#766910)
    
    [2] E2fsprogs Release Notes
        https://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.43
            E2fsprogs 1.43 (May 17, 2016)
            ...
            The resize2fs command can now convert file systems between
            64-bit and 32-bit mode.
    
    [3] resize2fs(8) - Linux manual page
        https://man7.org/linux/man-pages/man8/resize2fs.8.html#OPTIONS
            OPTIONS
                -b  Turns on the 64bit feature, resizes the group
                    descriptors as necessary, and moves other metadata out
                    of the way.
    
    Closes #295 - GParted should not disable 64bit feature of ext4 file
                  systems it creates

2025-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename members to Dialog_Progress:m_icon_execute et. al. and list initialise

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace Dialog_Progress::treerow member with local variables
    
    Member variable treerow was used as a local variable in 2 methods
    (Dialog_Progress() and on_signal_show()) and was shadowed by a local
    variable of the same name in a third (on_signal_update()).  Remove and
    replace with local variables.

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_treestore_operations

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_cancelbutton
    
    Also reorder widget initialisation into widget hierarchy order.

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_treeview_operations

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_scrolledwindow
    
    Also reorder widget initialisation into widget hierarchy order.

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_expander_details
    
    Also reorder widget initialisation into widget hierarchy order.

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Dialog_Progress::m_fraction const and use std::min()
    
    m_fraction is never updated after initialisation in the constructor so
    make it const.  Update the order in the initialisation list to match the
    new order in the class definition as members are initialised in order of
    declaration in the class [1][2].
    
    Replace ternary conditional operator (?:) with std::min() to avoid
    repetition of multiplication in two of the operands.
    
    [1] Constructors and member initializer lists
        https://en.cppreference.com/w/cpp/language/initializer_list.html
            Initialization order
            ...
            3) Then, non-static data member are initialized in order of
               declaration in the class definition.
    
    [2]
        https://isocpp.org/wiki/faq/ctors#ctor-initializer-order
            Immediate base classes (left to right), then member objects (top
            to bottom).
    
            In other words, the order of the initialization list should
            mimic the order in which initializations will take place.  This
            guideline discourages a particularly subtle class of order
            dependency errors ...

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_progressbar_all

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_label_current_sub

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_progressbar_current
    
    Also order the widget variable declaration in the class, and widget
    hierarchy creation in the constructor, from top to bottom and outer most
    to inner most.

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress:m_label_current
    
    More ongoing work to make it abundantly clear which variables are
    members of a class.

2025-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove outdated warning comment from btrfs::is_busy()
    
    Linux kernel 3.4 was released May 2012 and was supported until October
    2016 [1].  The oldest supported distributions and even no longer
    supported distributions use much newer versions of the Linux kernel so
    remove this no longer relevant comment.
    
    Oldest supported distributions:
        Distribution       EOL        Linux kernel version
        Debian 11          2026-Aug   5.10.0
        RHEL 8             2029-May   4.18.0
        SLES 15 SP7        2031-Jul   6.4.0
        Ubuntu 22.04 LTS   2029-May   6.8.0
    
    No longer supported distributions:
        Distribution       EOL        Linux kernel version
        Debian 9           2024-Jun   4.9.0
        Debian 10          2024-Jun   4.19.0
        RHEL 7             2024-Jul   3.10.0
        SLES 12 SP5        2024-Oct   4.12.14
        Ubuntu 16.04 LTS   2021-Apr   4.4.0
        Ubuntu 18.04 LTS   2023-May   4.15.0
        Ubuntu 20.04 LTS   2025-May   5.4.0
    
    [1] Linux Kernel Version History, Releases 3.x.y
        https://en.wikipedia.org/wiki/Linux_kernel_version_history#Releases_3.x.y
            Version   Original       Last      EOL            Notes
                      release date   release
            3.4       20 May 2012    3.4.113   October 2016   9th LTS
                                                              release

2025-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space tidy-up of enum Font and OperationDetail::set_description()

2025-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also use fixed width font to display synthesised mkdir & rmdir output (#72)
    
    Closes #72 - Monospace console output in operation details

2025-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use fixed width font to display command output in operation details (#72)
    
    Use noticed that as the output from resize2fs updates it's progress bar,
    replacing dashes with Xs, the length of the line varies because of the
    use of a proportional font.  Example interim output from resize2fs:
    
        Resizing the filesystem on /dev/sdb1 to 67790336 (4k) blocks.
        Begin pass 2 (max = 8298742)
        Relocation blocks             XXXX------------------------------------
    
    Use a fixed width font to display command output in the operation
    details.  As the Pango tags [1] are also valid HTML 4 tags [2] then this
    automatically applies to the saved details too.  (GParted details DTD
    (Document Type Definition) is actually XHTML 1.0 Transitional but that
    is equivalent to HTML 4 [3]).
    
    [1] [Pango - 1.0] Text Attributes and Markup
        https://docs.gtk.org/Pango/pango_markup.html
            Convenience Tags
                <b>  Bold
                <i>  Italic
                <tt> Monospace font
    
    [2] [HTML 4.01 Specification] 15 Alignment, font styles, and horizontal
        rules
        https://www.w3.org/TR/2018/SPSD-html401-20180327/present/graphics.html#h-15.2.1
            Rendering of font style elements depends on the user agent.  The
            following is an informative description only.
                TT: Renders as teletype or monospaced text.
                I:  Renders as italic text style.
                B:  Renders as bold text style.
            ...
            The following sentence shows several types of text:
    
                <P><b>bold</b>, <i>italic</i>, <b><i>bold italic</i></b>,
                <tt>teletype text</tt>, and <big>big</big> and
                <small>small</small> text.
    
    [3] Extensible HTML version 1.0 Transitional DTD
        https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
            This is the same as HTML 4 Transitional except for changes due
            to the differences between XML and SGML.
    
    Closes #72 - Monospace console output in operation details

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationResizeMove.h and .cc

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationNamePartition.h and .cc

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationLabelFileSystem.h and .cc

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationFormat.h and .cc

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationDelete.h and .cc

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update includes in OperationCreate.h and .cc
    
    Mostly add but also remove headers to apply the Include What You Use
    principle.  Note that OPERATION_FORMAT and OPERATION_RESIZE_MOVE are
    defined in Operation.h not OperationFormat.h and operationResizeMove.h
    hence removal of the later two headers.  Commit [1] was confused on this
    fact.
    
    [1] 6fd37c074529aaada18ec04baf098133b695b859
        Protect partition members within Operation classes (#759726)

2025-08-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationCopy.h and .cc and remove std::move()
    
    Also std::unique_ptr<Partition> m_partition_copied can be constructed
    from the raw pointer returned by partition_copied.clone() [1].  No need
    to use std::move().
    
    [1] std::unique_ptr::unique_ptr
        https://cplusplus.com/reference/memory/unique_ptr/unique_ptr/
            from pointer (3)    explicit unique_ptr (pointer p) noexcept;
            ...
            construct from pointer (3)
                The object takes ownership of p, initializing its stored
                pointer to p and value-initializing its stored deleter.

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationCheck.h and .cc

2025-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into OperationChangeUUID.h and .cc

2025-08-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Operation.h and .cc
    
    Apply the Include What You Use [1][2][3] principle.
    
    g_assert() is declared in <glib/gtestutils.h> but as documented [4] only
    include GLib's top-level header <glib.h>.
    
    [1] Why include what you use?
        https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/WhyIWYU.md
    
    [2] Include What You Use
        https://www.fluentcpp.com/2021/01/01/include-what-you-use/
    
    [3] Is it good practice to rely on headers being included transitively?
        https://softwareengineering.stackexchange.com/questions/262019/is-it-good-practice-to-rely-on-headers-being-included-transitively
    
    [4] [glib 2.32.0] README.in
        https://gitlab.gnome.org/GNOME/glib/-/blob/2.32.0/README.in?ref_type=tags#L70
            Notes about GLib 2.32
            =====================
            ...
            * It is now mandatory to include glib.h instead of individual
              headers.

2025-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update widget border width to 5 in the partition Information dialog
    
    Change the final border width using 6 pixels to 5 to be consistent.
    It's the widget containing all the text in the partition Information
    about dialog.  The difference of 1 pixel is impossible to see visually.
    
        $ fgrep set_border_width Dialog_Partition_Info.cc
                info_msg_vbox .set_border_width( 6 ) ;
                        vbox ->set_border_width( 5 ) ;
                frame ->set_border_width( 10 ) ;
                grid->set_border_width(5);

2025-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update widget border widths to 5 in the File System Support dialog
    
    The File System Support dialog uses widget border widths of 6 pixels,
    where as the majority of the dialogs in GParted uses a border width of 5
    pixels.
        $ egrep -oh 'set_border_width\( *[0-9]+ *\)' src/*.cc | tr -d ' ' | sort | uniq -c | sort -n
              3 set_border_width(6)
              5 set_border_width(10)
             11 set_border_width(5)
    
    When the File System Support dialog was first updated to set the border
    width [1] it was set to 6 pixels.  However at the time the majority of
    code also used 5 pixels.
        $ git checkout b84a88b5579c25ed7a5e05c20f58ea044a6897d3~1
        HEAD is now at fc801411 some small changes to make the GUI more consistent (#353140)
        $ egrep -oh 'set_border_width\( *[0-9]+ *\)' src/*.cc | tr -d ' ' | sort | uniq -c | sort -n
              5 set_border_width(10)
              6 set_border_width(5)
    
    There's no documented reason why the border width was set to 6 pixels
    for this dialog.  The difference of 1 pixel in various borders is
    impossible to see visually.  Therefore change it to the current
    predominate value of 5 pixels.
    
    [1] b84a88b5579c25ed7a5e05c20f58ea044a6897d3
        higgiefied the dialog a bit (#353104)

2025-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Gtk:: namespace qualifier to the use of manage()
    
    Most uses of manage() didn't qualify it but a few did.  Not sure how
    this code could be compiled as manage() is in the Gtk:: namespace [1].
    Anyway add the Gtk:: namespace qualifier everywhere like this:
        Gtk::manage(...)
    
    [1] gtkmm/gtk/gtkmm/object.h
        https://gitlab.gnome.org/GNOME/gtkmm/-/blob/3.24.6/gtk/gtkmm/object.h?ref_type=tags#L27
            27  namespace Gtk
            28  {
            ...
            42    template<class T>
            43    T* manage(T* obj)
            44    {
            45      obj->set_manage();
            46      return obj;
            47    }

2025-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Have all dialogs return RESPONSE_CLOSE when pressing the Close button
    
    Some of the dialogs return RESPONSE_OK when the close button is pressed
    and others return RESPONSE_CLOSE.
        $ fgrep 'Stock::CLOSE' src/Dialog*.cc
        src/DialogFeatures.cc:           add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE ) ->grab_focus() ;
        src/DialogManageFlags.cc:        add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_OK ) ->grab_focus() ;
        src/Dialog_Partition_Info.cc:    this ->add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_OK ) ;
        src/Dialog_Progress.cc:          this ->add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE );
    
    Be consistent and always return RESPONSE_CLOSE.  This makes no
    functional difference because the return value from the run() methods
    of DialogManageFlags and Dialog_Partition_Info are not checked.

2025-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent Manage flags dialog resizing when warning is shown vs hidden (#291)
    
    Toggle the ESP flag on and off on a MSDOS logical partition.  As the
    warning message is shown and hidden the dialog changes it's width.  The
    amount the dialog resizes depends on the size of the font the desktop
    environment uses.  The larger the font the wider the dialog becomes when
    the warning message is displayed.  The largest font encountered was on
    Fedora 42 with GNOME 48 using Adwaita Sans 11 [1].
    
    A Gtk::Label widget defaults max_width_chars to 40.  GParted enables
    line wrap on the m_warning_message label widget.  The logical ESP
    warning message wraps on to 2 lines.  Reserving space for 3 lines of
    text for translation.  On Fedora 42 with GNOME 48 using Adwaita Sans 11
    font the label widget becomes 345 x 57 pixels.  Add border and frame
    results in a size of 357 x 88 pixels.  Reserve 360 x 90 pixels for the
    warning frame and message.  This stops the dialog resizing when the
    warning message switches between being shown and hidden.
    
    [1] GNOME 48 Switches Over To "Adwaita Sans" As Default Font
        https://www.phoronix.com/news/GNOME-48-Adwaita-Sans
            After a decade and a half of using Cantarell as the default
            font, GNOME 48 shifts over to using Adwaita Sans by default.
            ...
            schemas/org.gnome.desktop.interface.gschema.xml.in
             105 105        </description>
             106 106      </key>
             107 107      <key name="font-name" type="a">
             108     -      <default>'Cantarell 11'</default>
                 108 +      <default>'Adwaita Sans 11'</default>
             109 109        <summary>Default font</summary>
             110 110        <description>
             111 111          Name of the default font used by gtk+.
    
    Closes #291 - Warn about EFI System set on a logical partition

2025-08-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display logical ESP warning in the Manage flags dialog (#291)
    
    Finish this off and display the UEFI firmware doesn't support booting
    from a logical EFI System Partition (ESP) when necessary.  If there's no
    warning the widgets are hidden and there is empty space in the dialog
    instead.
    
    Add this extra code and complexity so that a user receives immediate
    feedback when setting the ESP flag on a logical partition that it's not
    supported for UEFI mode booting.  Without this enhancement the user has
    to close the Manage flags dialog and after the device refresh know to
    open the partition Information about dialog to see the warning.  If
    there was already another warning for the partition then the warning
    symbol wouldn't be new either.
    
    Closes #291 - Warn about EFI System set on a logical partition

2025-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add warning display into the Manage flags dialog (#291)
    
    Create the necessary widgets and have them always shown in the Manage
    flags dialog.  So far just displays a placeholder FIXME text instead of
    the actual logical EFI System Partition (ESP) warning message.  The
    updated dialog looks like:
    
        +-+-----------------------------------------+-+-+
        |@|        Manage flags on /dev/sdb5        |^|x|
        +-+-----------------------------------------+-+-+
        |+---------------------------------------------+|
        || [ ] boot                                    ||
        || [ ] diag                                    ||
        || [x] esp                                     ||
        || [ ] hidden                                  ||
        || [ ] irst                                    ||
        || [ ] lba                                     ||
        || [ ] lvm                                     ||
        || [ ] palo                                    ||
        || [ ] prep                                    ||
        || [ ] raid                                    ||
        |+---------------------------------------------+|
        |/!\ WARNING:----------------------------------+|
        || FIXME: Implement fetching and displaying    ||
        || the real warning message and hiding if none ||
        ||                                             ||
        |+---------------------------------------------+|
        |                                     [x Close] |
        +-----------------------------------------------+
    
    Closes #291 - Warn about EFI System set on a logical partition

2025-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pack widgets into a vbox in the Manage flags dialog (#291)
    
    In Gtkmm 3 the content area of a dialog is documented as a vertical box
    [1].  However Gtkmm 4 makes no such statement, plus in Gtkmm 4 the
    dialog widget is deprecated and a window should be used instead [2].
    
    Most of the GParted dialogs place a single widget into the content area
    of a dialog, and then place additional widgets inside that.  Those that
    do this only have a single call to get_content_area()->pack_start().
    
        $ egrep 'get_content_area.*pack_start' src/Dialog*.cc | cut -d: -f1 | uniq -c
              3 src/Dialog_Base_Partition.cc
              1 src/Dialog_Disklabel.cc
              2 src/DialogFeatures.cc
              1 src/Dialog_FileSystem_Label.cc
              1 src/DialogManageFlags.cc
              2 src/Dialog_Partition_Info.cc
              1 src/Dialog_Partition_Name.cc
              1 src/Dialog_Progress.cc
    
    To be consistent with the majority of the dialogs add a vertical box
    widget to contain all the other widgets placed inside the dialog content
    area.  Further widgets will be added in following commits.
    
    Also:
    *   Add some previously missing #includes.
    *   Set the border width of the vbox to 5 pixels matching the value used
        in most of the other dialogs.
            $ egrep -o 'set_border_width\( *[0-9]+ *\)' src/Dialog*.cc | tr -d ' ' | cut -d: -f2 | sort | uniq -c | sort -n
                  3 set_border_width(6)
                  5 set_border_width(10)
                  9 set_border_width(5)
    *   Add widget hierarchy comments.
    *   Move load_treeview() to the end of the constructor so it's not in
        the middle of the widget hierarchy creation.
    
    [1] [Gtkmm 3.24] gtkmm: Gtk::Dialog Class Reference
        https://web.archive.org/web/20210306115620/https://developer.gnome.org/gtkmm/3.24/classGtk_1_1Dialog.html#details
            gtkmm treats a dialog as a window split vertically.  The top
            section is a vertical Gtk::Box, and is where widgets such as a
            Gtk::Label or a Gtk::Entry should be packed.  The bottom area is
            known as the action_area.  This is generally used for packing
            buttons into the dialog which may perform functions such as
            cancel, ok, or apply.
    
    [2] gtkmm 4.19.0: Gtk::Dialog Class Reference
        https://gnome.pages.gitlab.gnome.org/gtkmm/classGtk_1_1Dialog.html#details
            The main area of a Dialog is called the "content area", and is
            yours to populate with widgets such a Gtk::Label or Gtk::Entry,
            to present your information, questions, or tasks to the user.
    
            In addition, dialogs allow you to add "action widgets".  Most
            commonly, action widgets are buttons.  Depending on the
            platform, action widgets may be presented in the header bar at
            the top of the window, or at the bottom of the window.
            ...
            Deprecated:
                4.10: Use Gtk::Window instead.
    
    Closes #291 - Warn about EFI System set on a logical partition

2025-08-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove duplicate "Manage Flags on /dev/PTN" text in dialog (#291)
    
    The title of the Manage Flags dialog was duplicated as large text in the
    dialog itself.  None of the other dialogs in GParted have this.
    Therefore remove.
    
    Closes #291 - Warn about EFI System set on a logical partition

2025-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Generate a warning for logical EFI System Partitions (ESP)s (#291)
    
    A user was converting their laptop to boot in UEFI mode.  On a Master
    Boot Record (MBR) partitioned drive they created an EFI System Partition
    (ESP) in a logical partition but their laptop didn't boot.  When the
    ESP was re-create in a primary partition their laptop did boot.  They
    requested that GParted warn when a logical partition is set as an ESP.
    
    The UEFI Specification [1] describes the MBR partition table that is
    supported but there is no mention of primary, extended or logical
    partitions.  Only partition type 0xEF (EFI System Partition) in the MBR
    in sector 0.
    
    After also finding these results [2][3], the conclusion is that UEFI
    booting from a logical ESP is not supported.  Therefore make GParted
    generate a partition warning when a logical partition is set as an ESP.
    
    [1] UEFI Specification 2.11, 5.2.1 Legacy Master Boot Record (MBR)
        https://uefi.org/specs/UEFI/2.11/05_GUID_Partition_Table_Format.html#legacy-master-boot-record-mbr
            A legacy MBR may be located at LBA 0 (i.e., the first logical
            block) of the disk if it is not using the GPT disk layout (i.e.,
            if it is using the MBR disk layout).  The boot code on the MBR
            is not executed by UEFI firmware.
            ...
            The MBR contains four partition records (see Table 11) that each
            define the beginning and ending LBAs that a partition consumes
            on a disk.
    
    [2] Can the EFI System Partition be a logical partition on MBR disks?
        https://unix.stackexchange.com/questions/277858/can-the-efi-system-partition-be-a-logical-partition-on-mbr-disks
            The specification in section 5, starting on PDF page 165, gives
            the layout of an MBR partition table.  It does not mention the
            extended partition, so UEFI does not support it.
    
            Thus, according to the standard, would appear to be "no".
    
    [3] Should ESP (EFI) partition be primary or logical?
        https://superuser.com/questions/1410368/should-esp-efi-partition-be-primary-or-logical
            I want to create an ESP partition for my EFI on a new disk.
    
            Should I check "Create as Primary Partition"?
    
            I found out: yes, I should.  Otherwise the partition may risk
            not being seen at startup.
    
    Closes #291 - Warn about EFI System set on a logical partition

2025-08-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace use of deprecated Gtkmm::Dialog::get_vbox()
    
    [1] Gtkmm 3.2, NEWS
        https://gitlab.gnome.org/GNOME/gtkmm/-/blob/3.2.0/NEWS?ref_type=tags#L100
            Dialog: Deprecate get_vbox(), replacing with get_content_area(),
            to match the C function name.

2025-08-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove extra code scope from Dialog_Progress constructor
    
    Commit "Bug #634090: Change some attributes to local variables" [1]
    added nested code scopes to a number of dialog constructor code.  Think
    this was to limit the lifetime of local variables pointing to created
    widgets so each variable went out of scope as soon as possible after the
    widget had been adopted into the hierarchy.  At the time DialogFeatures
    had some code nested up to 4 scopes deep and indented by 4 tabs.
    Dialog_Progress constructor still has code indented 1 scope for vbox,
    local variable pointing to widget.
    
    There's no safety reason the local variables must go out of scope sooner
    than the end of the constructor.  Extra code scopes are unexpected as
    they are normally associated with flow control: if, for and while.
    Therefore remove.
    
    Add a comment for every new widget explaining it's place in the
    hierarchy.  Move assignment to the icons from the middle of the widget
    hierarchy creation code to afterwards.  Move vbox->set_spacing(5) to the
    top of the section of code to join vbox->set_border_width(10).
    
    [1] 91b971691d912859cbeb3b916c27bb90c1fcceec
        Bug #634090: Change some attributes to local variables

2025-08-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix expansion of details in Applying pending operations dialog (#168)
    
    The operation details widget didn't resize vertically when the Applying
    pending operations dialog was resized.  Instead it remained a height
    size and extra space in the dialog remained unused.  That has been the
    case since GParted 1.0.0 and the Gtk3 port.
    
    Fix this by setting vexpand on the operation details so the widget
    expands vertically when the dialog is resized.
    
    [1] gtkmm - How to make box containing widgets expand to fill window?
        https://stackoverflow.com/questions/49088760/gtkmm-how-to-make-box-containing-widgets-expand-to-fill-window
    
    Closes #168 - Progress window can be resized, but Details height doesn't
                  change

2025-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename set_static_data() parameter to device_length
    
    For consistency with the parameter being passed from load_partitions()
    parameter of the same name.

2025-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename method to TreeView_Detail::set_selected_by_ptn()
    
    Rename the private method set_selected() to reflect that it selects by
    partition object.  Matches how DrawingAreaVisualDisk::set_select()
    methods were renamed.

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to TreeView_Detail::m_block and list initialise

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables to TreeView_Detail::m_treestore_detail et al.

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename members to DrawingAreaVisualDisk::m_color_* and list initialise
    
    Also make them const as they are no longer modified now they are being
    created in the constructor initialisation list.

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to DrawingAreaVisualDisk::m_tot_sep et al. and list initialise

2025-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor DrawingAreaVisualDisk::set_selected() methods
    
    * Rename the two private set_selected() methods differently to make it
      clear that one selects by coordinate and one selects by partition
      object.
    * Move initial assignment of m_selected_vp = nullptr into each
      set_selected_by_*() method so that it's clear it's the starting state
      for the search.
    * Change the visual partition search loops to return when the desired
      partition is found, rather than have an extra clause in the loop
      condition and the second if.  This simplifies the code and matches how
      the equivalent TreeView_Detail::set_selected() is coded.

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to DrawingAreaVisualDisk::m_selected_vp and list initialise

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to DrawingAreaVisualDisk::m_visual_partitions
    
    More work towards having member variables start with m_ to make it
    abundantly clear that they are members of a class.
    
    Also for member variable visual_partitions, set_static_data() and
    set_selected() methods receive a parameter of the same name which
    shadows it.  This is confusing and bad practice [1].  set_static_data()
    and set_selected() are recursive to handle logical partitions so must
    receive the vector as a parameter, so can't be changed to directly use
    the member variable.  The parameter could be renamed but what would be a
    good name for the vector of visual partitions which is
    m_visual_partitions except when it's a sub-part.  (Rhetorical question).
    
    [1] C++ Core Guidelines, ES.12: Do not reuse names in nested scopes
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es12-do-not-reuse-names-in-nested-scopes
            Reason: It is easy to get confused about which variable is used.
            Can cause maintenance problems.
            ...
            Enforcement:
            ...
            * Flag reuse of a member name as a local variable in a member
              function

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename struct to VisualPartition
    
        $ fgrep visual_partition include/DrawingAreaVisualDisk.h
        struct visual_partition ;
        ...
        void calc_usage( std::vector<visual_partition> & visual_partitions ) ;
        void calc_text( std::vector<visual_partition> & visual_partitions ) ;
        ...
    
    It was confusing with the struct named visual_partition and function
    parameters of type std::vector<visual_partition> named
    visual_partitions, only differing by a single letter 's' at the end of
    the parameter name.  Rename the struct to the GParted predominate
    "PascalCase" and leave the function parameter names using "snake_case"
    [1].
    
    [1] Naming convention (programming),
        Examples of multiple-word identifier formats
        https://en.wikipedia.org/wiki/Naming_convention_(programming)#Examples_of_multiple-word_identifier_formats

2025-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Re-parameterise remove_operation() to make it obvious what it does
    
    Looking at the calls to remove_operation(), without knowing it's
    implementation, it was not possible to know which operations would be
    removed.  Update the parameters to make it very obvious which operations
    each call will remove.
    
        Before                       After
        remove_operation(-1, true)   remove_operation(REMOVE_ALL)
        remove_operation()           remove_operation(REMOVE_LAST)
        remove_operation(n)          remove_operation(REMOVE_AT, n)

2025-08-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LVM flag for preview of create LVM2 PV (#288)
    
    When GParted creates a new LVM2 PV partition it sets the libparted LVM
    flag to set the on-disk partition type appropriately [1].  However when
    previewing the operation the flag is not shown.  Set the LVM flag when
    composing create a new LVM2 PV partition so the preview matches what
    will be implemented.
    
    Also see earlier commit "Set libparted ESP and LVM flags correctly when
    formatting (#288)" for the discussion about choosing to always set the
    LVM flag regardless of whether libparted supports it on the partition
    table or not.
    
    [1] c3ab62591b73266f43b379d9a7aef3be13f3c384
        Add creation of LVM2 PVs (#670171)
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set ESP and LVM flags correctly when formatting (#288)
    
    Formatting a partition for all file system types previews as clearing
    all flags.  When applied the ESP flag is always cleared regardless of
    the file system type.  When applied formatting to LVM2 PV, the LVM flag
    is always set.
    
    Fix format composition to do the right thing:
    1. Formatting to a FAT file system in an EFI System Partition (ESP)
       keeps the ESP flag.
    2. Formatting any other file system in an ESP clears the ESP flag.
       (The code implicitly already does this by clearing all flags).
    3. Formatting to an LVM2 PV sets the LVM flag.
    4. Formatting to a non-LVM2 PV clears the LVM flag.
       (The code implicitly already does this by clearing all flags).
    
    Note that in libparted the LVM flag is only available for these
    partition tables: AMIGA, GPT, MAC, MSDOS & SUN.  It's not available in
    the remaining partition tables: ATARI, AIX, BSD, DVH, & PC98.  As the
    LVM flag is available for MSDOS and GPT, virtually the only tables used
    nowadays, then always set the flag when composing and therefore
    previewing the operation.  Don't bother trying to not set the LVM flag
    when formatting a partition on one of the other tables, it's not worth
    the code complexity.  When the operation is applied the LVM flag will
    only be set set if it's supported.
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear LVM flag when copying non-LVM2 PV file system into existing (#288)
    
    Copy a non-LVM2 PV file system into an existing partition with the LVM
    flag set.  GParted previews this as leaving the LVM flag set but when
    applied the LVM flag is cleared.  Fix this so the preview of the copy
    operation clears the LVM flag.  Copying an LVM2 PV is not supported so
    just always clear the LVM flag when pasting into an existing partition.
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear ESP when copying non-FAT file system into existing (#288)
    
    Now copy a non-FAT file system over the top of an existing partition
    with on-disk type of EFI System Partition (ESP).  GParted previews and
    implements this as leaving the ESP flag set.
    
    As non-FAT file system can't be an ESP [1] clear the flag to set a file
    system specific partition type when copying a none FAT file system into
    an existing partition.
    
    [1] UEFI Specification 2.11, 13.3. File System Format
        https://uefi.org/specs/UEFI/2.11/13_Protocols_Media_Access.html#file-system-format
            EFI encompasses the use of FAT32 for a system partition, and
            FAT12 or FAT16 for removable media.
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Maintain EFI System Partition type when copying into existing (#288)
    
    This time copy an EFI System Partition (ESP) containing a FAT file
    system into an existing partition.  GParted previews and implements this
    as not setting the ESP flag.
    
    Fix this to maintain the ESP on-disk partition type when copying into an
    existing partition by setting the ESP flag.
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Maintain EFI System Partition type when copying to new (#288)
    
    A user used GParted to copy an ESP (EFI System Partition) as part of
    cloning a Windows installation to a new disk drive, but it failed to
    boot afterwards because the the copied ESP changed it's partition type
    to a regular Microsoft Basic Data Partition [1].
    
    Setup: disk drive is formatted as GPT with a partition set to type ESP
    and containing a FAT32 file system.
        # fdisk -l /dev/sdb
        ...
        Disklabel type: gpt
        Disk identifier: D7061EA3-9161-4429-AC19-8361AE94D4D5
    
        Device     Start    End Sectors  Size Type
        /dev/sdb1   2048 526335  524288  256M EFI System
    
        # sgdisk --info 1 /dev/sdb | grep 'Partition GUID code'
        Partition GUID code: C12A7328-F81F-11D2-BA4B-00A0C93EC93B (EFI System)
    
        # blkid /dev/sdb /dev/sdb1
        /dev/sdb: ... PTTYPE="gpt"
        /dev/sdb1: ... TYPE="vfat" ...
    
    GParted previews copying this partition to a new partition as
    maintaining the ESP flag, however when the operation is applied that is
    not what happens.  Operation details:
        * Copy /dev/sdb1 to /dev/sdb (start at 257 MiB)            (SUCCESS)
          * calibrate /dev/sdb1                                    (SUCCESS)
          * create empty partition                                 (SUCCESS)
          * set partition type on /dev/sdb2                        (SUCCESS)
              new partition type: fat32                            (SUCCESS)
          * copy file system from /dev/sdb1 to /dev/sdb2           (SUCCESS)
          * check file system on /dev/sdb2 for errors and (if p... (SUCCESS)
    
    Afterwards the on-disk partition type of the new copied partition is
    Microsoft Basic Data Partition:
        # fdisk -l /dev/sdb
        ...
        Disklabel type: gpt
        Disk identifier: D7061EA3-9161-4429-AC19-8361AE94D4D5
    
        Device      Start     End Sectors  Size Type
        /dev/sdb1    2048  526335  524288  256M EFI System
        /dev/sdb2  526336 1050623  524288  256M Microsoft basic data
    
        # sgdisk --info 2 /dev/sdb | grep 'Partition GUID code'
        Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
    
    Make GParted keep the ESP on-disk partition type when copying into a new
    partition and the contained file system is FAT16 or FAT32 [2].
    
    [1] Windows 10 x86 KB4495667 update reaches 92% and then rolls back
        https://www.sysnative.com/forums/threads/windows-10-x64-kb4495667-update-reaches-92-and-then-rolls-back.28314/
    
    [2] UEFI Specification 2.11, 13.3. File System Format
        https://uefi.org/specs/UEFI/2.11/13_Protocols_Media_Access.html#file-system-format
            EFI encompasses the use of FAT32 for a system partition, and
            FAT12 or FAT16 for removable media.
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create two sub-functions from set_partition_type() (#288)
    
    Libparted doesn't expose on-disk partition types.  Instead specify the
    file system the partition will contain and libparted sets the partition
    type appropriately.  Additionally there are multiple boolean flags many
    of which override the file system based partition type selection.  For
    example the LVM flag overrides the on-disk partition type on MSDOS to 8E
    (Linux LVM) and on GPT to E6D6D379-F507-44C2-A23C-238F2A3DF928 (Linux
    LVM).
    
    Separate out these two different methods of specifying the on-disk
    partition type, by flag and by file system, into their own functions.
    The same operation detail strings are used as before, however those
    steps are now also timed and checked (libparted errors captured and
    reported at this operation detail level rather than one level higher).
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor set_partition_type() into if fail return early etc (#288)
    
    * Refactor the code into if fail return early pattern to make it easier
      to understand.
    * Make the method static as it doesn't access any member variables.
    * Save a reference to operationdetail.get_last_child() to avoid repeated
      calls to it.
    
    Closes #288 - GPT partition type GUID (code) does not get copied in
                  partition copy & paste feature

2025-08-14  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member and list initialise Dialog_Progress::m_cancel_countdown
    
    Also move cancel_timeout() to be with other method declarations in the
    class declaration.

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables to Dialog_Progress::m_progress_text et al.

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename members and list initialise Dialog_Progress::m_success et al.

2025-07-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Dialog_Progress::m_operations
    
    As well as the usual reason of making it abundantly clear it's a member
    variable it also avoids confusion reading the constructor code because
    it has a parameter with the same name as the member variable.  Which
    was meant when 'operations' was used?  (The parameter named operations
    shadowed member variable of the same name, hence previous use of
    this->operations).  And the initialiser list contained this:
        operations(operations)
    
    The same name used twice, each referring to a different thing.  Giving
    the member variable a different name to the constructor parameter avoids
    this confusion.

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Compare using m_partition_new in OperationCheck::merge_operations()
    
    This makes no functional change because the OperationCheck constructor
    duplicates the same partition object for m_partition_original and
    m_partition_new.  However every other operation and logically speaking
    it should be the new partition object of the existing operation which is
    compared with the original partition object of the candidate operation
    when confirming operation mergeability.  Update accordingly.
    
    Visually:
        Source         Partition object
    
        from drive ----[sdb1]
    
        existing    +--[partition_original]
        operation --+
        in list     +--[partition_new]      \
                                            | Compared in merge_operations()
        candidate   +--[partition_original] /
        operation --+
        for merge   +--[partition_new]

2025-07-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Operation::m_partition_original and m_partition_copied const
    
    Now that m_partition_original and m_partition_copied are initialised in
    the constructor initialisation list and never modified afterwards make
    them const.  m_partition_new can't be made const because it is updated
    by all the derived Operation*::merge_operation() methods.

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to OperationCopy::m_partition_copied and list initialise

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to Operation::m_partition_new and list initialise
    
    Note that the OperationDelete constructor continues to use the 3
    parameter Operation constructor without partition_new parameter because
    OperationDelete never uses Operation::m_partition_new.  Where as all the
    other derived Operation constructors switch to use the 4 parameter
    Operation constructor with partition_new parameter as they do use
    Operation::m_partition_new.

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to Operation::m_partition_original and list initialise

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Operation::m_operation_detail

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Operation::m_description

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Operation::m_icon

2025-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Operation::m_type and m_device const
    
    Now that m_type and m_device are initialised in the constructor
    initialisation list and never modified afterwards make them const.
    
    [1] C++ Constructor Initializer List
        https://www.codecademy.com/resources/docs/cpp/constructor-initializer-list
            A constructor initializer list in C++ is a way to directly
            initialize member variables when an object is created.  It sets
            variable values before the constructor body runs.  This helps
            make the program more efficient and is required for const
            variables, references, and base class objects.

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to Operation::m_device and list initialise
    
    As with the previous commit, m_device is an Operation base class member
    variable so the derived constructors have to initialise it by passing a
    value to the parameterised base class constructor.  The Operation
    constructor is updated accordingly.

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to Operation::m_type and list initialise
    
    Continue the work towards having all member variables start with m_ to
    make it very clear they are members of a class.  As recommended use list
    initialisation in the constructor rather than assignment in the
    constructor body [1].  Base class member variables can not directly be
    included in the initialisation list of a derived class constructor, even
    if they are public members, because they are not members of the derived
    class.  Instead they must be initialised by passing values to a
    parameterised base class constructor [2].  Example:
        class Base
        {
        public:
            Base(Value val) : m_val(val);
            Value m_val;
        }
    
        class Derived : public Base
        {
        public:
            // Derived(Value val) : m_val(val);  // Error: m_val not a member of Derived
            Derived(Value val) : Base(val);
        }
    
    Also move m_type to be the first mentioned member variable in the class
    because the type of the operation is the most important characteristic
    of an Operation object.
    
    [1] C++ FAQ / Should my constructors use "initialization lists" or
        "assignment"?
        https://isocpp.org/wiki/faq/ctors#init-lists
            Initialization lists.  In fact, constructors should initialize
            as a rule all member objects in the initialization list.
    
    [2] How can I initialize base class member variables in derived class
        constructor?
        https://stackoverflow.com/questions/7405740/how-can-i-initialize-base-class-member-variables-in-derived-class-constructor

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now empty Operation* destructors (!145)
    
    ... and switch to the default destructor for base class Operation.  This
    is because it's:
    1.  Recommended to not provide an empty destructor and instead use the
        compiler generated one.
    2.  Required for the base class to be virtual to allow for the correct
        destruction of derived classes via a polymorphic base class pointer.
    
    Therefore the Operation base class destructor is declared as virtual and
    = default, and all the derived class destructors are not declared or
    defined, allowing the compiler to provide them.
    
    See these previous commits for multiple how and why references:
    *   4168772d3a589a2f68181238a9e945a4e079079b
        Remove most of the empty class destructors (!143)
    *   0723ff49416d88fa9722c6d08e5ac5265a98de12
        Make Frame_Resizer_Base destructor virtual (!143)
    *   5674d31acdbf0661f2af5a8ece69a05d8da72b05
        Switch to the default destructor for Frame_Resizer_Base (!143)
    
    Closes !145 - Convert Operations to smart pointers

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert ownership of Partition objects inside Operations to unique_ptr (!145)
    
    Operation objects own independent copies of polymorphic Partition
    objects, so must be accessed via a pointer.  Convert to unique_ptr to
    represent ownership.
    
    Closes !145 - Convert Operations to smart pointers

2025-07-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Introduce typedef OperationVector (!145)
    
    It's a short hand for:
        std::vector<std::unique_ptr<Operation>>
    
    As discussed in the previous commit message, modern C++ guidance is that
    passing a unique_ptr<T> is transferring ownership.  However passing an
    object that internally contains a unique_ptr is not transferring
    ownership.  In this case passing a vector of unique_ptr to Operation by
    reference is not transferring ownership of the Operation objects, they
    are still owned by the vector.  Replacing the long form type with the
    shorter typedef name which doesn't contain "unique_ptr" is meant to help
    understanding this and be simpler to read and comprehend.
    
    Closes !145 - Convert Operations to smart pointers

2025-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert ownership of Operation objects to unique_ptr (!145)
    
    In modern C++ the guidance is to use smart pointers to represent
    ownership.  See earlier commit for multiple references [1].  Ownership
    is transferred by passing a unique_ptr<T> to functions [2][3].  And the
    corollary is that passing a pointer to T or a reference to T is merely
    use and not transferring ownership [4].
    
    Each Win_GParted::activate_*() method constructs the relevant derived
    Operation object and transfers ownership like this:
        std::unique_ptr<Operation> operation = std::make_unique<Operation...>(...);
        add_operation(..., std::move(operation));
    
    Then Win_GParted::add_operation() transfers ownership to the vector of
    operations with:
        m_operations.push_back(std::move(operation));
    
    [1] 13f90722e5ae4cfc3b42067edc80d996f8396994
        Convert GParted_Core::supported_filesystems to unique_ptr (!143)
    
    [2] C++ Core Guidelines, F: Functions
            https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Rf-unique_ptr
            F.26: Use a unique_ptr<T> to transfer ownership where a pointer
            is needed
    
    [3] How C++ Smart Pointers Manage Resource Ownership
        https://medium.com/@AlexanderObregon/how-c-smart-pointers-manage-resource-ownership-52d0065c80a9
            Move semantics: unique_ptr supports move semantics, allowing
            ownership to be transferred from one unique_ptr to another.
            This is done using the std::move function.
    
    [4] C++ Core Guidelines, F: Functions
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Rf-smart
            F.7: For general use, take T* or T& arguments rather than smart
            pointers
    
            Reason: Passing a smart pointer transfers or shares ownership
            and should only be used when ownership semantics are intended.
            A function that does not manipulate lifetime should take raw
            pointers or references instead.
    
    Closes !145 - Convert Operations to smart pointers

2025-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace C strings with C++ std::strings in detect_filesystem_internal()
    
    This simplifies the code and makes it more robust because C++
    std::strings are arrays of characters of known length, where as C
    strings are NUL byte terminated sequences of characters of unknown
    length.
    1. No longer have to assume char[16] will be big enough to store the
       largest possible magic values.
    2. No longer have to separately track the length of the current
       signatures to be match with variables len1 and len2.
    3. Allows for 0 (NUL) character in std::string so can correctly match 2
       byte "\x01\x00" sig1 for APFS.
    
    Also the signatures variable never changes and is used read-only.
    Therefore make it static const so it is only initialised once during the
    life of the program and read-only access is enforced.

2025-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace malloc()ed buffer with vector<char> in CopyBlocks (!144)
    
    To avoid manual malloc() and free() so that the buffer is automatically
    managed by std::vector.
    
    Note that std::vector always constructs all elements.  For
    std::vector<char> that means every element is 0 initialised during
    construction unless an alternative value is specified.  GParted's
    internal block copy calls CopyBlocks(...).copy() 6 times, with block
    sizes of 1, 2, 4, 8, 16 MiBs and once more with the optimal block size.
    On my desktop the elapsed time for all 6 allocations added together, and
    in the std::vector<char> case also zero initialisation, are:
        Method                           Time (seconds)
        malloc()                         0.000215
        std::vector<char> buf.resize()   0.008184
    
    It isn't worth the effort and code complexity to avoid initialisation
    [1][2] to save 0.008 seconds.
    
    [1] So You Want a vector of Uninitialized Elements?
        https://mmore500.com/2019/12/11/uninitialized-char.html
    
    [2] How to Resize a Vector Without Initializing New Elements in C++?
        https://www.geeksforgeeks.org/cpp/resize-vector-without-initializing-new-elements-in-cpp/
    
    Closes !144 - Replace all uses of malloc() with vector<char>

2025-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace malloc()ed buffer with vector<char> in detect_filesystem_internal() (!144)
    
    To avoid manual malloc() and free() so that the buffer is automatically
    managed by std::vector.
    
    Closes !144 - Replace all uses of malloc() with vector<char>

2025-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace malloc()ed buffer with vector<char> in erase_filesystem_signatures() (!144)
    
    To avoid manual malloc() and free() so that the buffer is automatically
    managed by std::vector.
    
    Closes !144 - Replace all uses of malloc() with vector<char>

2025-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace malloc()ed buffer with vector<char> in useable_device() (!144)
    
    In modern C++ (C++11 onwards) the guidance is to not allocate and free
    memory manually with malloc()/free() or new/delete because it is error
    prone.  Instead use standard containers where possible and smart
    pointers where necessary [1][2][3][4].
    
    Replace manual malloc() and free() of the buffer in useable_device()
    with std::vector<char> as it automatically handles the memory allocation
    and deallocation.
    
    [1] C++ Core Guidelines, R: Resource management
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-resource
            * Allocation and deallocation rule summary:
                * R.10: Avoid malloc() and free()
    
    [2] C++ std::vector vs array in the real world
        https://stackoverflow.com/questions/6462985/c-stdvector-vs-array-in-the-real-world
            One of the best reasons to use a vector as opposed to an array
            is the RAII idiom.  Basically, in order for c++ code to be
            exception-safe, any dynamically allocated memory or other
            resources should be encapsulated within objects.  These objects
            should have destructors that free these resources.
            ...
            It's also a nice way to avoid having to remember to use delete.
    
    [3] Containers vs Smart pointers in C++
        https://stackoverflow.com/questions/54708231/containers-vs-smart-pointers-in-c
            If you have the choice though, prefer to use C++ style
            containers where you can.
            ...
            Always use STL containers except in situation where you have
            good reason to use pointers.  Reasons are reliability and
            readability, IMO.
    
    [4] Why use new and delete at all?
        https://stackoverflow.com/questions/26423270/why-use-new-and-delete-at-all
            The recent wisdom is to avoid explicit new and delete (e.g.
            by using standard containers and smart pointers).
            ...
            However with modern C++11 you generally rely on standard
            libraries like vector and map for memory allocation, and the use
            of smart pointers helps you avoid memory leaks, so you don't
            really need to use new and delete explicitly by hand.
    
    Closes !144 - Replace all uses of malloc() with vector<char>

2025-08-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly include Frame_Resizer_Base.h / _Extended.h
    
    Apply the Include What You Use [1][2][3] principle to the inclusion of
    those headers.
    
    [1] Why include what you use?
        https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/WhyIWYU.md
    
    [2] Include What You Use
        https://www.fluentcpp.com/2021/01/01/include-what-you-use/
    
    [3] Is it good practice to rely on headers being included transitively?
        https://softwareengineering.stackexchange.com/questions/262019/is-it-good-practice-to-rely-on-headers-being-included-transitively

2025-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove include <stddef.h> from SupportedFileSystems.cc
    
    <stddef.h> was included to provide the definition of NULL.  This is no
    longer needed since commit:
        40665913bfd9d3267f2d575456bb8d4f3d828c03
        C++11: Convert NULL to nullptr (!117)

2025-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing include for unique_ptr into FileSystem.cc
    
    std::unique_ptr is defined in <memory> [1].  Add the #include missed by
    commit [2].
    
    [1] C++ / Memory management library / std::unique_ptr
        https://en.cppreference.com/w/cpp/memory/unique_ptr.html
            std::unique_ptr
            Defined in header <memory>
    
    [2] 4ce8cfd841015e11b3699eaf15e2fd268fb9dff1
        Create mount points in a private temporary working directory (!139)

2025-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to the default destructor for Partition (!143)
    
    See the previous commit "Switch to the default destructor for
    Frame_Resizer_Base" for all the reasoning.  For Partition base class
    replace the virtual empty defined destructor with the virtual defaulted
    destructor.  For the PartitionLUKS derived class remove the destructor
    all together [1].
    
    [1] 25.4 - Virtual destructors, virtual assignment, and overriding
        virtualization
        https://www.learncpp.com/cpp-tutorial/virtual-destructors-virtual-assignment-and-overriding-virtualization/
            As with normal virtual member functions, if a base class
            function is virtual, all derived overrides will be considered
            virtual regardless of whether they are specified as such.  It is
            not necessary to create an empty derived class destructor just
            to mark it as virtual.
    
    Closes !143 - Convert SupportedFileSystems to smart pointers and remove
                  empty class destructors

2025-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to the default destructor for Frame_Resizer_Base (!143)
    
    The guidance is to not provide an empty destructor and let the compiler
    provide it instead [1].  However for classes deleted polymorphically,
    via a base class pointer, the destructors must be virtual [2] but *ALL*
    destructor are non-virtual by default [3].  Therefore declare the base
    class destructor as virtual with an explicit defaulted compiler
    implementation [4].
    
    [1] C++ Core Guidelines, C.dtor: Destructors
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cdtor-destructors
            If the default destructor is sufficient, use it.  Only define a
            non-default destructor if a class needs to execute code that is
            not already part of its members' destructors.
    
    [2] C++ / C++ language / Classes / Destructors
        https://en.cppreference.com/w/cpp/language/destructor.html
            Virtual destructors
    
            Deleting an object through pointer to base invokes undefined
            behavior unless the destructor in the base class is virtual:
                ...
            A common guideline is that a destructor for a base class must be
            either public and virtual or protected and nonvirtual.
    
    [3] Can the default destructor be generated as a virtual destructor
        automatically?
        https://stackoverflow.com/questions/1117481/can-the-default-destructor-be-generated-as-a-virtual-destructor-automatically
            No, all destructor's are by default NOT virtual.
    
            You will need to define a virtual destructor on all the base
            classes
    
    [4] 25.4 - Virtual destructors, virtual assignment, and overriding
        virtualization
        https://www.learncpp.com/cpp-tutorial/virtual-destructors-virtual-assignment-and-overriding-virtualization/
            As with normal virtual member functions, if a base class
            function is virtual, all derived overrides will be considered
            virtual regardless of whether they are specified as such.  It is
            not necessary to create an empty derived class destructor just
            to mark it as virtual.
    
            Note that if you want your base class to have a virtual
            destructor that is otherwise empty, you can define your
            destructor this way:
                virtual ~Base() = default; // generate a virtual default destructor
    
    Closes !143 - Convert SupportedFileSystems to smart pointers and remove
                  empty class destructors

2025-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Frame_Resizer_Base destructor virtual (!143)
    
    Frame_Resizer_Base destructor is not currently declared as virtual.
    An object of type Frame_Resizer_Base or Frame_Resizer_Extended is
    constructed in Dialog_Base_Partition::Set_Resizer() and destructed via
    a base class pointer in Dialog_Base_Partition::~Dialog_Base_Partition().
    
    Code in Dialog_Base_Partition.h:
        class Dialog_Base_Partition : public Gtk::Dialog
            ...
        protected:
            Frame_Resizer_Base *frame_resizer_base;
    
    Code in Dialog_Base_Partition.cc:
        void Dialog_Base_Partition::Set_Resizer( bool extended )
            if ( extended )
                frame_resizer_base = new Frame_Resizer_Extended() ;
            else
            {
                frame_resizer_base = new Frame_Resizer_Base() ;
                frame_resizer_base ->signal_move .connect( ... );
            }
    
        Dialog_Base_Partition::~Dialog_Base_Partition()
            ...
            delete frame_resizer_base;
    
    This is undefined behaviour [1][2][3][4].  Therefore declare the
    Frame_Resizer_Base destructor as virtual.
    
    [1] C++ / C++ language / Classes / Destructors
        https://en.cppreference.com/w/cpp/language/destructor.html
            Virtual destructors
    
            Deleting an object through pointer to base invokes undefined
            behavior unless the destructor in the base class is virtual:
                class Base
                {
                public:
                    virtual ~Base() {}
                };
    
                class Derived : public Base {};
    
                Base* b = new Derived;
                delete b; // safe
        A common guideline is that a destructor for a base class must be
        either public and virtual or protected and nonvirtual.
    
    [2] Virtual Destructors in C++. Necessity, Good Practice, Bad Practice
        https://bulldogjob.com/readme/virtual-destructors-in-c-necessity-good-practice-bad-practice
            Upon examining the advantages and disadvantages of using virtual
            destructors, the best practice can be summarized by Scott
            Meyers, from his book Effective C++:
            > "Polymorphic base classes should declare virtual destructors.
            > If a class has any virtual functions, it should have a virtual
            > destructor.  Classes not designed to be base classes or not
            > designed to be used polymorphically should not declare virtual
            > destructors." (p. 58)
    
    [3] Can the default destructor be generated as a virtual destructor
        automatically?
        https://stackoverflow.com/questions/1117481/can-the-default-destructor-be-generated-as-a-virtual-destructor-automatically
            No, all destructor's are by default NOT virtual.
    
            You will need to define a virtual destructor on all the base
            classes
    
            In addition to that.
    
            To quote Scott Meyers in his book "Effective C++":
    
            > The C++ language standard is unusually clear on this topic.
            > When you try to delete a derived class object through a base
            > class pointer and the base class has a non-virtual destructor
            > (as EnemyTarget does), the results are undefined
    
    [4] deleting object through pointer to base without virtual destructor
        https://stackoverflow.com/questions/64863464/deleting-object-through-pointer-to-base-without-virtual-destructor
            ... deleting a pointer to a derived type through the base
            pointer is technically UB (undefined behavior) when the
            destructor of the base class is not virtual.  Quoting from the
            C++ standard 5.3.5/3:
            > In the first alternative (delete object), if the static type
            > of the object to be deleted is different from its dynamic
            > type, the static type shall be a base class of the dynamic
            > type of the object to be deleted and the static type shall
            > have a virtual destructor or the behavior is undefined.
    
    Closes !143 - Convert SupportedFileSystems to smart pointers and remove
                  empty class destructors

2025-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove most of the empty class destructors (!143)
    
    Because it's recommended not to provide an empty destructor [1], instead
    let the compiler generate the destructor automatically.  Apply this to
    all the GParted classes which are not base classes or derived from other
    GParted classes.  Those have additional considerations and will be dealt
    with next.
    
    [1] C++ Core Guidelines, C.dtor: Destructors
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cdtor-destructors
            C.dtor: Destructors
    
            "Does this class need a destructor?" is a surprisingly
            insightful design question.  For most classes the answer is "no"
            either because the class holds no resources or because
            destruction is handled by the rule of zero; that is, its members
            can take care of themselves as concerns destruction.  If the
            answer is "yes", much of the design of the class follows (see
            the rule of five).
    
            C.30: Define a destructor if a class needs an explicit action at
            object destruction
    
            Reason: A destructor is implicitly invoked at the end of an
            object's lifetime.  If the default destructor is sufficient, use
            it.  Only define a non-default destructor if a class needs to
            execute code that is not already part of its members'
            destructors.
    
    Closes !143 - Convert SupportedFileSystems to smart pointers and remove
                  empty class destructors

2025-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert SupportedFileSystems class to use unique_ptrs (!143)
    
    See the previous commit "Convert GParted_Core::supported_filesystems to
    unique_ptr" for the reasons why using smart pointers over raw points is
    preferred.
    
    Note on destruction:
    The SupportedFileSystems class destructor is now empty because
    everything is automatically destructed.  When the SupportedFileSystems
    object is destructed it destructs all it's object member variables
    including m_fs_objects, which in turn destructs each unique_ptr, which
    in turn destructs each FileSystem object.  Nothing further is required.
    
    Closes !143 - Convert SupportedFileSystems to smart pointers and remove
                  empty class destructors

2025-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert GParted_Core::supported_filesystems to unique_ptr (!143)
    
    In modern C++ (>= C++ 11) the guidance is to not use raw pointers but
    instead use smart pointers [1][2].  A smart pointer is responsible for
    owning a heap allocated object and to automatically delete the heap
    object when the smart pointer goes out of scope, without the programmer
    having to remember to code it manually [3][4][5].  Convert
    GParted_Core::supported_filesystems to std::unique_ptr as it is the sole
    owner of the constructed SupportedFileSystems object.
    
    [1] Modern C++: Smart Pointers
        https://medium.com/@weidagang/modern-c-smart-pointers-529633603154
            Why Smart Pointers?
    
            In traditional C++, manual memory management using raw pointers
            can be error-prone.  Developers need to remember to delete
            allocated memory, which can lead to memory leaks if forgotten.
            Smart pointers solve this problem by automatically managing the
            lifetime of dynamically allocated objects.
    
    [2] C++ Core Guidelines, R: Resource management
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management
            R.3: A raw pointer (a T*) is non-owning
            R.10: Avoid malloc() and free()
            R.11: Avoid calling new and delete explicitly
            R.20: Use unique_ptr or shared_ptr to represent ownership
            R.21: Prefer unique_ptr over shared_ptr unless you need to share
            ownership
    
    [3] unique_ptr in C++: Complete Guide
        https://medium.com/@ryan_forrester_/unique-ptr-in-c-complete-guide-ab5cde4f696f
            What Makes unique_ptr Different?
    
            A 'unique_ptr' owns what it points to.  When the 'unique_ptr' is
            destroyed, it automatically deletes the object it manages.  This
            means:
            - No manual memory management
            - No memory leaks
            - Clear ownership semantics
            - Zero runtime overhead compared to raw pointers
            ...
    
            Creating unique_ptr Objects
    
            Always use 'std::make_unique' to create 'unique_ptr' objects.
            It's safer and more efficient:
    
    [4] What is a C++ unique pointer and how is it used?
        https://iamsorush.com/posts/unique-pointers-cpp/
    
    [5] Understanding the inner workings of C++ smart pointers - The
        unique_ptr
        https://andreasfertig.com/blog/2024/07/understanding-the-inner-workings-of-cpp-smart-pointers-the-unique_ptr/
    
    Closes !143 - Convert SupportedFileSystems to smart pointers and remove
                  empty class destructors

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to DialogManageFlags::m_flag_info and list initialise

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to DialogManageFlags::m_partition
    
    Also avoids name confusion in the initialisation list as to what each
    name in 'partition(partition)' refers.

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to DialogManageFlags::m_liststore_flags

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to DialogManageFlags::m_row

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to DialogManageFlags::m_treeview_flags

2025-07-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to DialogManageFlags::m_changed and list initialise
    
    Prefix the member variable name with m_ and initialise in the
    constructor initialisation list rather than by assignment in the
    constructor body.

2025-07-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove enum from before use of type FSType in a couple of places
    
    In C++ an enumeration creates a type which can be used without the enum
    keyword prefix [1][2].  FSType is mostly used like this but there are a
    few cases of enum FSType.  Remove the unnecessary enum keywords to be
    consistent with how most of the GParted code is written.
    
    [1] Enumeration declaration
        https://en.cppreference.com/w/cpp/language/enum.html
            Unscoped enumerations
            ...
                enum Color { red, green, blue };
                Color r = red;
    
    [2] Some Differences Between C and C++
        http://xenon.stanford.edu/~sjac/c-to-cpp-info/c-to-cpp-differ
            In C++, an instance of the enum color can be defined and
            declared as follows without a typedef:
                enum color {
                    Red, Yellow, Green
                };
    
                color someColor;

2025-07-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to Win_GParted::m_operationslist_open and list initialise
    
    GParted uses all upper case for macro names and enumerator identifiers,
    not member variables.  Avoid confusion and rename to "snake_case" [1]
    and prefix with m_ as it's a member variable.  Also initialise in the
    constructor initialisation list as is recommended.
    
    (There are multiple other transgressors to be updated at another time).
    
    [1] Naming convention (programming),
        Examples of multiple-word identifier formats
        https://en.wikipedia.org/wiki/Naming_convention_(programming)#Examples_of_multiple-word_identifier_formats

2025-07-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Win_GParted::m_operations

2025-07-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Win_GParted::m_devices

2025-07-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member to Win_GParted::m_current_device and list initialise
    
    This is continuing the work towards having all member variables starting
    with m_ to make it abundantly clear that they are members of a class.
    Also initialise m_current_device in the constructor initialisation list
    rather than by assignment in the constructor body [1][2].  It's
    recommended because it's more efficient and const and reference members
    can only be initialised in the initialisation list.
    
    Just going to rename a few of the Win_GParted member variables that I've
    been looking at recently in the next few commits.
    
    [1] C++ FAQ / Should my constructors use "initialization lists" or
        "assignment"?
        https://isocpp.org/wiki/faq/ctors#init-lists
            Initialization lists.  In fact, constructors should initialize
            as a rule all member objects in the initialization list.
    
    [2] C++: Where to initialize variables in constructor [duplicate]
        https://stackoverflow.com/questions/6822422/c-where-to-initialize-variables-in-constructor/6822479

2025-07-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix typo in comment for Win_GParted::m_display_device

2025-07-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update to C++11 idiom for prohibiting copying of classes
    
    When copying of the classes was first prohibited [1] it had to use the
    original technique of a private declaration and no definition because
    GParted was still being compiled with pre-C++11 compilers at the time.
    Now GParted requires C++14 compilation [2] update to the C++11 syntax of
    declaring the functions as deleted [3][4][5].
    
    Compiling code containing these lines:
        OperationCheck o1(dev, ptn);  // Parameterised construction allowed
        OperationCheck o2 = o1;       // Copy construction generates an error
        o2 = o1;                      // Copy assignment generates an error
    
    Produces these errors:
        test.cc: In function 'void GParted::test()':
        test.cc:13:22: error: use of deleted function 'GParted::OperationCheck::OperationCheck(const GParted::OperationCheck&)'
          OperationCheck o2 = o1;       // Copy construction generates an error
                              ^~
        In file included from test.cc:3:
        ../include/OperationCheck.h:33:2: note: declared here
          OperationCheck(const OperationCheck& src) = delete;             // Copy construction prohibited
          ^~~~~~~~~~~~~~
        test.cc:14:7: error: use of deleted function 'GParted::OperationCheck& GParted::OperationCheck::operator=(const GParted::OperationCheck&)'
          o2 = o1;                      // Copy assignment generates an error
               ^~
        In file included from test.cc:3:
        ../include/OperationCheck.h:34:18: note: declared here
          OperationCheck& operator=(const OperationCheck& rhs) = delete;  // Copy assignment prohibited
                          ^~~~~~~~
    
    [1] commit b516b1093c6ac0e65b87e125204d49a7a7fdf0d3
        Use pointers to Partitions in Operation classes (#759726)
    
    [2] commit 7218d0884e834124b8093ee187968297e4c8328f
        Require C++14 compilation (!137)
    
    [3] C++11 - the new ISO C++ standard, control of defaults: default and
        delete
        https://www.stroustrup.com/C++11FAQ.html#default
            The common idiom of "prohibiting copying" can now be expressed
            directly:
                class X {
                public:
                        // ...
                        X& operator=(const X&) = delete;  // Disallow copying
                        X(const X&) = delete;
                };
    
    [4] C++11 Language Extensions = Classes, =default and =delete
        https://isocpp.org/wiki/faq/cpp11-language-classes#default-delete
            [[Identical text as Bjarne Stroustrup's C++11 FAQ]]
    
    [5] What Is A Deleted Function In Modern C++?
        https://learncplusplus.org/what-is-a-deleted-function-in-modern-c/
            A deleted function is a function that contains =delete; in its
            prototype.  This construction, introduced with C++11, indicates
            that the function may not be used.  This construction can be
            used to forbid the usage of default language facilities (like
            default constructors or default operators) or problematic
            conversions.

2025-07-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify operation merging management (#117)(#780034)
    
    Change from always adding an operation to the list and then attempting
    to merge it afterwards to attempt to merge the operation first and if
    that is not possible add it instead.  This makes the code simpler by
    allowing for the removal of merge_two_operations(), but add_operation()
    does have to take on the responsibility for deleting the operation when
    it's merged into the list it's not wanted any more.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                  the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Attempt merging of all operations when added (#177)(#780043)
    
    Operation merging is enabled in two different ways.  Whether
    Win_GParted::merge_operations() is called when composing each operation
    and by what each Operation*::merge_operations() allows.  The later is
    the ultimate control because those methods have to implement merging of
    the operation or not.  So just always attempt to merge the latest
    operation and rely on what each Operation*::merge_operations()
    implements.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor add_operation() into if fail return early pattern (#117)(#780034)
    
    Refactor into if fail return early pattern to make the code easier to
    understand and re-write the operation and new partition validity check
    to be clearer in which cases it applies.  Also rename the method to the
    predominant all lower case.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused operation merging rules (#177)(#780043)
    
    Now there's only a single operation merging rule being used, remove all
    the others as they are unused.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant operation merging when deleting a new partition (#117)(#780034)
    
    When a new not yet created partition (STAT_NEW) is deleted GParted
    removes all operations for that partition.  Afterwards all newly
    adjacent operations are re-tested for mergeability (MERGE_ALL_ADJACENT).
    With all other operations now using the new merge rule
    (MERGE_LAST_WITH_PREV_SAME_PTN) all mergeable operations have already
    been merged and deleting all operations for a not yet created partition
    doesn't allow for any more merging of operations on other partitions.
    
    Test case: A disk with a partition and some empty space:
        [  /dev/sdb1  ][  unallocated  ]
    Compose these operations:
    1. Format /dev/sdb1 as ext2
    2. Create primary partition #1 (linux-swap) on /dev/sdb
    3. Format /dev/sdb1 as ext3
    4. Delete New Partition #1 (linux-swap) from /dev/sdb
    
    Before this patchset GParted queues the first three operations and on
    composing the fourth, operations 2 and 4 are removed and 1 and 3 become
    adjacent and are merged.
    
    Before this commit GParted queues the first two operations and on
    composing the third, it is merged past the second into the first.  Then
    on composing the forth, operations 2 and 4 are removed.
    
    Operations are already merged past those for other partitions so
    deleting all operations for another partition now doesn't allow for more
    operations to be merged.  Therefore remove the redundant merge request.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use new operation merge method for format (#117)(#780034)
    
    The same reasoning applies as was used in earlier commit "Use new
    operation merge method for resize/move (#117)(#780034)".  Formatting an
    existing partition (STAT_REAL) can be merged with the previous format
    operation on the same partition skipping past operations affecting other
    partitions (MERGE_LAST_WITH_PREV_SAME_PTN).  Formatting of a new not yet
    created partition (STAT_NEW) can also be merged past all operations on
    other partitions (MERGE_LAST_WITH_ANY).  This can also use the new merge
    rule (MERGE_LAST_WITH_PREV_SAME_PTN) and produce the same sequence of
    operations after merging.  Therefore in all cases merge a format
    operation using the new rule (MERGE_LAST_WITH_PREV_SAME_PTN).
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Maintain partition status while composing format operation (#117)(#780034)
    
    In the case of formatting a closed LUKS encrypted partition, temp_ptn is
    default constructed (Partition::Partition()), which calls Reset() which
    sets the status to STAT_REAL.  Maintain the partition status by copying
    it from the selected partition.  So far this makes no run-time
    difference because only existing (STAT_REAL) partitions containing
    closed LUKS encrypted data can be formatted.  Create new partition
    (STAT_NEW) and copy paste into new partition (STAT_COPY) of closed LUKS
    encrypted data is not supported so formatting of these cases can't
    arise.  This is being done for consistency so that activate_format()
    always maintains the status of the new partition object that is
    composes.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash from assert failure in ped_partition_is_flag_available() (#117)(#780034)
    
    Compose these operations:
    (1) Copy existing partition pasting into new,
    (2) Format new partition,
    and then on the new partition attempt Partition > Manage Flags.  GParted
    reports this dialog:
    
                              Libparted Bug
        Assertion (ped_partition_is_active (part)) at disk.c:1416
        in function ped_partition_is_flag_available() failed.
                                                         [  No  ]
    
    and core dumps like this:
        # ./gpartedbin
        GParted 1.7.0-git
        configuration --enable-libparted-dmraid
        libparted 3.2
        Backtrace has 20 calls on the stack:
        ...
        Assertion (ped_partition_is_active (part)) at disk.c:1416 in function ped_partition_is_flag_available() failed.
        # gdb ./gpartedbin core --batch --quiet --ex backtrace -ex quit
        ...
        Core was generated by `./gpartedbin'.
        Program terminated with signal SIGABRT, Aborted.
        #0  0x00007f8d5e82152f in raise () from /lib64/libc.so.6
        [Current thread is 1 (Thread 0x7f8d63f9d680 (LWP 581834))]
        #0  0x00007f8d5e82152f in raise () at /lib64/libc.so.6
        #1  0x00007f8d5e7f4e65 in abort () at /lib64/libc.so.6
        #2  0x00007f8d5fb13fbc in ped_assert (cond_text=cond_text@entry=0x7f8d5fb3ed50 "ped_partition_is_active (part)", file=file@entry=0x7f8d5fb3e858 "disk.c", line=line@entry=1416, function=function@entry=0x7f8d5fb3f640 <__PRETTY_FUNCTION__.5323> "ped_partition_is_flag_available") at debug.c:111
        #3  0x00007f8d5fb177fa in ped_partition_is_flag_available (part=0x26d0610, flag=PED_PARTITION_BOOT) at disk.c:1416
        #4  0x000000000046b9d1 in GParted::GParted_Core::get_available_flags(GParted::Partition const&) (this=this@entry=0x7fffc8e66990, partition=...) at /usr/include/c++/8/bits/stl_vector.h:930
        #5  0x00000000004a9ba4 in GParted::Win_GParted::activate_manage_flags() (this=0x7fffc8e65f60) at Win_GParted.cc:3277
        ...
    
    GParted is asking libparted what partition flags are available on a
    partition which it has not yet created, hence the assert failure.
    Bisected this crash to being introduced by commit "Remove superfluous
    STAT_FORMATTED" [1] new in GParted 1.6.0.
    
    Prior to commit [1] the status of the partition object in a composed
    format operation was set to STAT_NEW when formatting a new not yet
    created partition and STAT_FORMATTED otherwise.  This prevented most
    operations on top of it, including Manage Flags.  See
    set_valid_operations().
    
    After commit [1] the status of the partition was set to STAT_NEW when
    formatting a new not yet created partition and STAT_REAL otherwise.
    Specifically when formatting a pasted into new partition (STAT_COPY) the
    status was changed to STAT_REAL by the temp_filesystem_ptn.Reset() call,
    thus allowing Manage Flags on a not yet created partition.
    
    Fix this by making resize/move maintain the partition status the same
    as the selected partition (STAT_REAL, _NEW or _COPY) thus preventing
    attempting Manage Flags on not yet created partitions.
    
    [1] eb6a77c4fdcd4ae93eec19a9555da57e0879b3b5
        Remove superfluous STAT_FORMATTED
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use new operation merge method for resize/move (#117)(#780034)
    
    Merge of a resize/move operation on an existing (STAT_REAL) partition
    was only permitted with the previous operation (MERGE_LAST_WITH_PREV).
    However intervening operations on other partitions can safely be ignored
    therefore change this case to MERGE_LAST_WITH_PREV_SAME_PTN.
    
    Only resize/move and format operations are permitted on not yet created
    new partitions (STAT_NEW).  These operations were merged past all
    operations on other partitions (MERGE_LAST_WITH_ANY) always leaving a
    single create new partition operation.  Therefore change resize/move on
    a not yet created new partition to MERGE_LAST_WITH_PREV_SAME_PTN as it
    will produce the same list of operations after merging.
    
    Now all cases of a resize/move operation are merged using the new rule
    (MERGE_LAST_WITH_PREV_SAME_PTN).
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant status = STAT_NEW in activate_resize() (#117)(#780034)
    
    As activate_resize() constructs and updates the resized_ptn object from
    the selected_partition_ptr, via the dialog, it keeps status member the
    same.  Therefore if selected_partition_ptr->status == STAT_NEW then it
    is also true that resized_ptn->status == STAT_NEW.  Therefore the
    assignment is redundant so remove it.  (The removed line was called when
    resizing/moving a new primary or logical partition, not yet created on
    the drive).
    
    Historical analysis:
    The assignment was added by commit "Replace open coded merge of
    resize/move into create operation (#755214)" [1].
    
    Before commit [1] activate_resize() open coded forward merging of a
    previous create operation with the currently being composed resize/move
    on this pending create partition.  It called
    temp_partition.Set_Unallocated() to compose an empty space partition
    object to be used as the before copy of the partition in the newly
    merged create operation.  Set_Unallocated() explicitly sets
    status = STAT_REAL.
    
    With commit [1] activate_resize() added a resize/move operation and
    elsewhere in the code the operation was backward merged with the earlier
    create operation.  This new code constructed and populated part_temp
    from the selected_partition_ptr, via the dialog, much like the current
    code does.  Set_Unallocated() was no longer called.  Therefore the
    partition status value was preserved so the assignment of
    status = STAT_NEW was never needed.
    
    [1] 5793c5ac03bea5b4818309e5755803b00feeb016
        Replace open coded merge of resize/move into create operation (#755214)
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disallow operation merging past others on the same partition (#117)(#780034)
    
    A user reported that after two partition name operations were merged
    together past other intervening operations on the same partition, the
    main window previewed the partition with the first, rather than the
    second name.
    
    For example compose these operations all on the same partition:
    1. Set partition name "ONE" on /dev/sdb1
    2. Set file system label "NEWLABEL" on /dev/sdb1
    3. Set partition name "TWO" on /dev/sdb1
    
    GParted merges the 3rd operation into the 1st giving this display in the
    main window:
        Partition   | Name | File System | Label
        -----------------------------------------------
        /dev/sdb1     ONE           ext4   NEWLABEL
        unallocated          unallocated
    
        -----------------------------------------------
        * Set partition name "TWO" on /dev/sdb1
        * Set file system label "NEWLABEL" on /dev/sdb1
    
        -----------------------------------------------
        2 operations pending
    
    When GParted composes each operation it saves a before and after copy of
    the partition object [1].  When GParted merges an operation it updates
    the earlier operation's after partition object with that from the
    operation being merged from [2].  And when GParted visually applies the
    pending operations it replaces the current displayed partition object
    with the after copy recorded in the operation [3].
    
    [1] Operation::partition_original and ::partition_new respectively
    [2] Operation*::merge_operations()
    [3] Operation*::apply_to_visual()
    
    So after merging the two remaining operations visually applied this:
    1. Replaced the partition object for display with one containing the
       partition name of "TWO", as updated by the operation merging.
    2. Replaced the partition object for display with one containing the
       file system label of "NEWLABEL", but also the partition name of "ONE"
       because that is what it was when the 2nd operation was composed.
    
    Therefore it is not correct to simply replace the partition object when
    visually applying the operations after operations have been merged past
    others on the same partition.  So far this is only a visual preview
    issue.
    
    Consider this new test case of composing the following operations
    affecting the same partition:
    1. Set file system label "ONE" on /dev/sdb1
    2. Copy /dev/sdb2 to /dev/sdb1
    3. Set file system label "TWO" on /dev/sdb1
    
    GParted merges the 3rd operation into the 1st leaving these operations:
    1. Set file system label "TWO" on /dev/sdb1
    2. Copy /dev/sdb2 to /dev/sdb1
    
    These two sequences of operations will not have the same affect when
    applied.  Without merging the label of sdb1 would be "TWO" but with
    merging the label of sdb1 would be whatever the label of the file system
    copied from sdb2 was.
    
    This specific test case was chosen because it can and has been tested on
    the current GParted master and GParted 0.10.0 (when operation merging
    was first introduced).  In general it is not correct to merge operations
    past other operations affecting the same partition.
    
    Partition naming is a property of the partition so could be merged past
    other file system specific manipulation operations on the same
    partition.  However file system operations such as new UUID and label
    file system can't be merged past paste into the partition because those
    all affect the partition contents.  Don't try to work out and code the
    complicated rules of which operations can be merged passed other
    operations.  Instead have a simple rule of only merging an operation
    with the previous operation affecting the same partition, skipping past
    operations affecting other partitions.  This is simple to understand and
    simple to implement.  It is also compatible with how operations are
    visually applied by replacing the visual partition with the after copy
    from the operation.
    
    Merging of operations past other operations on the same partition is
    only an issue for the merging of check, label file system, name
    partition and new UUID operations because multiple operations can be
    queued for the same partition and can be merged past a paste into
    operation on the same partition (MERGE_LAST_WITH_ANY on STAT_REAL
    partitions).  It is not an issue for resize/move and format operations
    on existing partitions because they don't merge operations past other
    operations (MERGE_LAST_WITH_PREV on STAT_REAL partitions).  And for
    resize/move, delete and format operations on new not yet created
    partitions all operations are merged to a single create new operation
    (MERGE_LAST_WITH_ANY on STAT_NEW partitions) so there are never multiple
    queued operations to incorrectly merge past.  Additionally paste
    operations can't be composed on a new not yet created partition.
    
    Bug 780034 - Partlabel/label is not updated if a newer job is queued for
                 the same partition
    Closes #117 - Partition name is not updated in GUI if another "set
                  partition name" op is queued after a non-rename op

2025-06-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused Autoconf macro AX_CXX_COMPILE_STDCXX_11 (!141)
    
    Since commit "Require C++14 compilation (!137)" [1] this Autoconf
    Archive macro is no longer needed so remove it.
    
    Make this a separate commit from the previous one just so that git diff
    can't use it's file similarity heuristic and display the combined change
    as though ax_cxx_compile_stdcxx_11.m4 was edited a bit and renamed to
    ax_cxx_compile_stdcxx_14.m4.
    
    [1] commit c73ee0fc5eaf0303e9ba6e710ff65ed46b63c019
        Require C++14 compilation (!137)
    
    Closes !141 - Fix configure script detection of C++14 compiler when
                  generated without AX_CXX_COMPILE_STDCXX_14 being available

2025-06-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix configure script detection of C++14 compiler (!141)
    
    As part of merge request !138 "Require C++14 compilation and update to
    Google Test 1.16.0" GParted was successfully built by the GitLab
    Continuous Integration jobs on Alpine Linux 3.17.  But looking closely
    at the job output showed this:
        $ ./autogen.sh
        ...
        Running ./configure --enable-maintainer-mode ...
        ...
        checking for glibmm-2.4 >= 2.32.0... yes
        yes
        checking for gtk_show_uri_on_window() function... yes
    
    Where as it should have be:
        $ ./autogen.sh
        ...
        Running ./configure --enable-maintainer-mode ...
        ...
        checking for glibmm-2.4 >= 2.32.0... yes
        checking whether g++ supports C++14 features by default... yes
        checking for Gtk::ScrolledWindow::set_propagate_natural_width() method... yes
        checking for gtk_show_uri_on_window() function... yes
    
    The generated configure script didn't check for a standard C++14
    compiler and didn't print the "checking for
    Gtk::ScrolledWindow::set_propagate_natural_width() method..." message.
    This is because Alpine Linux doesn't have the autoconf-archive package
    installed by default to provide the AX_CXX_COMPILE_STDCXX_14 macro and
    GParted doesn't include a local copy.  So the call to the macro was
    passed through from configure.ac to the configure shell script
    unchanged.  The fragment of generated configure shell script looked like
    this:
        AX_CXX_COMPILE_STDCXX_14()
    
        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gtk::ScrolledWindow::set_propagate_natural_width() method" >&5
        printf %s "checking for Gtk::ScrolledWindow::set_propagate_natural_width() method... " >&6; }
    
    Instead of having shell code to check for the presence of a C++14
    standard compiler the macro name became the start of a shell function
    and the following two curly-brace enclosed lines, which were meant to
    print the missing following message, became it's body.
    
    This is only an issue on distributions which don't have autoconf-archive
    installed and GParted is compiled from the git repository, using
    ./autogen.sh.  Fix this by adding a copy of the AX_CXX_COMPILE_STDCXX_14
    macro and updating to the latest AX_CXX_COMPILE_STDCXX macro, which it
    calls.
    
    Closes !141 - Fix configure script detection of C++14 compiler when
                  generated without AX_CXX_COMPILE_STDCXX_14 being available

2025-06-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update more comments for replaced Win_GParted::display_partitions
    
    There are still more comments which mention
    Win_GParted::display_partitions after it was replaced by
    Win_GParted::m_display_device.partitions.  Update these comments.
    Missed in these previous commits:
    
    [1] aeaeedc2eb0e349293e39c79c362a279d9f9a53c
        Update Refresh_Visual() comment regarding display partitions
    [2] e801689680ea525726a98b3bd9b91f1c10734628
        Remove now duplicated Win_GParted::display_partitions member (#227)

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename struct to TreeView_FileSystems_Columns
    
        $ egrep 'treeview_[a-z]*_Columns ' include/*.h
        include/DialogFeatures.h:  struct treeview_filesystems_Columns : public Gtk::TreeModelColumnRecord
        include/DialogFeatures.h:  treeview_filesystems_Columns m_treeview_filesystems_columns;
    
    Rename the final treeview_[a-z]*_Columns struct to match the GParted
    naming convention of "PascalCase" / "Pascal_Snake_Case" [1].
    
    [1] Naming convention (programming),
        Examples of multiple-word identifier formats
        https://en.wikipedia.org/wiki/Naming_convention_(programming)#Examples_of_multiple-word_identifier_formats

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename treeview_devices_[Cc]olumns struct and member variable
    
    To better distinguish the the struct and member variable names.

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename treeview_detail_[Cc]olumns struct and member variable
    
    To better distinguish the the struct and member variable names.

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename treeview_operations_[Cc]olumns in HBoxOperations
    
    To better distinguish the the struct and member variable names.

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename treeview_operations_[Cc]olumns in Dialog_Progress
    
    To better distinguish the the struct and member variable names.

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename treeview_flags_[Cc]olumns struct and member variable
    
        $ egrep 'treeview_[a-z]*_Columns treeview_[a-z]*_columns' include/*.h
        include/DialogManageFlags.h:  treeview_flags_Columns treeview_flags_columns ;
        include/Dialog_Progress.h:    treeview_operations_Columns treeview_operations_columns;
        include/HBoxOperations.h:     treeview_operations_Columns treeview_operations_columns;
        include/TreeView_Detail.h:    treeview_detail_Columns treeview_detail_columns;
        include/Win_GParted.h:        treeview_devices_Columns treeview_devices_columns ;
    
    Having a struct and a member variable only differing by the case of a
    single character towards the end of the name is very hard to spot.  To
    better distinguish them rename them.  Use the GParted predominant
    "PascalCase" / "Pascal_Snake_Case" [1] for the struct and "snake_case"
    for the variable.  Additionally prefix the variable name with m_ to make
    it clear it's a member.
    
    [1] Naming convention (programming),
        Examples of multiple-word identifier formats
        https://en.wikipedia.org/wiki/Naming_convention_(programming)#Examples_of_multiple-word_identifier_formats

2025-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Separate FSCK type messages from the label reported by fatlabel (#286)
    
    Following a lockup and reboot of my desktop while several USB keys were
    mounted GParted is now reporting fsck.fat messages as part of the
    FAT16/32 file system label for those partitions.
    
    For the FAT32 file system on the first USB key:
    (Run fsck.fat and fatlabel throwing away stderr to demonstrate the
    messages aren't being written to that stream):
        # fsck.fat -n /dev/sda1 2> /dev/null
        fsck.fat 4.1 (2017-01-24)
        There are differences between boot sector and its backup.
        This is mostly harmless. Differences: (offset:original/backup)
          71:42/4e, 72:52/4f, 73:49/20, 74:44/4e, 75:47/41, 76:45/4d, 77:54/45
          , 78:53/20, 79:5f/20, 80:4b/20, 81:31/20
          Not automatically fixing this.
        /dev/sda1: 82 files, 1489643/1956005 clusters
    
        # fatlabel /dev/sda1 2> /dev/null
        There are differences between boot sector and its backup.
        This is mostly harmless. Differences: (offset:original/backup)
          71:42/4e, 72:52/4f, 73:49/20, 74:44/4e, 75:47/41, 76:45/4d, 77:54/45
          , 78:53/20, 79:5f/20, 80:4b/20, 81:31/20
          Not automatically fixing this.
        BRIDGETS_K1
    
    For the FAT32 file system on the second USB key:
        # fsck.fat -n /dev/sdb1 2> /dev/null
        fsck.fat 4.1 (2017-01-24)
        0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
         Automatically removing dirty bit.
        Leaving filesystem unchanged.
        /dev/sdb1: 342 files, 101636/1890667 clusters
    
        # fatlabel /dev/sdb1 2> /dev/null
        0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
         Automatically removing dirty bit.
        MIKES-KEY2
    
    Fix this by separating the fatlabel output using the heuristic that the
    label is on the last line and anything before that is an FSCK type
    message.  According to the FAT Specification [1] control characters,
    including the new line character, are illegal in short directory
    entries, including the volume label.  GParted, mlabel and fatlabel 4.2
    and later don't allow putting new lines characters into labels, but
    fatlabel 4.1 and earlier does.  It seems very unlikely that anyone will
    have put new line characters into a FAT16/32 label and this will become
    less possible as distributions still using dosfstools 4.1 reach end-of-
    life.  This simple heuristic feels like the right solution.
        # fatlabel /dev/sda1 | tail -1
        BRIDGETS_K1
    
        # fatlabel /dev/sdb1 | tail -1
        MIKES-KEY2
    
    Set the FSCK type messages as a partition message which GParted displays
    to the user as a partition warning.  Running FSCK on these FAT32 file
    systems fixes them, clearing the errors.  This can be done in GParted
    using the check operation.
    
    [1] Microsoft FAT Specification
        https://academy.cba.mit.edu/classes/networking_communications/SD/FAT.pdf
            6.1 FileDirectory Name
            ...
            Restrictions on characters comprising the name:
            * Lower case characters are not allowed
            * Illegal values for characters in the name are as follows:
              * Values less than 0x20 (except for the special case of 0x05
                in DIR_Name[0] described earlier)
    
    Closes #286 - GParted 1.7.0-git displays error messages along with the
                  FAT label

2025-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Refresh_Visual() comment regarding display partitions
    
    Update the section of the comment which was missed when
    Win_GParted::m_display_device.partitions replaced
    Win_GParted::display_partition by change:
        e801689680ea525726a98b3bd9b91f1c10734628
        Remove now duplicated Win_GParted::display_partitions member (#227)

2025-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prefix DialogPasswordEntry member variable names with m_
    
    To make it clear which are member variables.

2025-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace Frame_Resizer_Base::temp_x and ::temp_y with local variables
    
    These members were use as local variables in only one method,
    Frame_Resizer_Base::drawingarea_on_mouse_motion().  Therefore replace
    with local variables.

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor *_temp_dir() into if fail return early etc
    
    For mk_temp_dir() and rm_temp_dir():
    * Convert to if fail return early code pattern.
    * Make the methods static as neither access any member variables.
    * Pass dir_name to rm_temp_dir() by reference.  It was already a const
      parameter.
    * Save a reference to operationdetail.get_last_child() to avoid repeated
      calls to it.

2025-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create mount points in a private temporary working directory (!139)
    
    Debian bug 916260 "gparted mounts partition without protection" [1] says
    that if a file system has insecure file permissions but is normally
    protected by secure directory permissions above it's mount point, then
    when when GParted mounts such a file system it will expose those files.
    This is because GParted currently uses mount points named from template
    $TMPDIR/gparted-XXXXXX which are created in the world accessible /tmp
    directory.
    
    Example captured in the middle of an XFS file system copy:
        # ls -ld /tmp/gparted-*
        drwxr-xr-x. 2 root root 73 Jun 14 07:52 /tmp/gparted-dest-iLEWGH
        drwxr-xr-x. 2 root root 23 Jun 14 07:49 /tmp/gparted-src-euhtLl
    
        # grep gparted /proc/mounts
        /dev/sdb1 /tmp/gparted-src-euhtLl xfs ro,seclabel,noatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
        /dev/sdb2 /tmp/gparted-dest-iLEWGH xfs rw,seclabel,relatime,nouuid,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
    
    The mount point directory permissions come from the permissions of the
    top level directory in the file system while it is mounted.
    
    The security lapse is with the insecure file permissions in the file
    system being mounted but GParted must not change those.  So lets change
    GParted to create it's temporary mount points in a private temporary
    working directory.  The private temporary working directory is only
    created when first needed and named using the existing template of
    $TMPDIR/gparted-XXXXXX.  The directory permissions are set to 0700
    (rwx------) preventing non-root access to the mount points created
    within it.  The private temporary working directory is removed when
    GParted is closed.
    
    Same example captured with the fix applied:
        # ls -ld /tmp/gparted-*
        drwx------. 4 root root 41 Jun 15 11:18 /tmp/gparted-25G2Jo
    
        # ls -la /tmp/gparted-25G2Jo
        total 4
        drwx------.  4 root root   41 Jun 15 11:18 .
        drwxrwxrwt. 20 root root 4096 Jun 15 11:19 ..
        drwxr-xr-x.  2 root root   73 Jun 14 07:52 mnt-dest-3
        drwxr-xr-x.  2 root root   23 Jun 14 07:49 mnt-src-2
    
        # grep gparted /proc/mounts
        /dev/sdb1 /tmp/gparted-25G2Jo/mnt-src-2 xfs ro,seclabel,noatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
        /dev/sdb2 /tmp/gparted-25G2Jo/mnt-dest-3 xfs rw,seclabel,relatime,nouuid,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
    
    Uses a std::unique_ptr with a custom deleter to apply RAII (Resource
    Acquisition is Initialisation) [2] idiom to manage the temporary working
    directory as a resource and remove it when GParted closes [3][4][5][6].
    
    [1] Debian bug 916260 - gparted mounts partition without protection
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916260
    [2] Resource acquisition is initialization
        https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization
    [3] std::unique_ptr as a Generic RAII Wrapper
        https://biowpn.github.io/bioweapon/2024/03/05/raii-all-the-things.html
            "Intro
            std::unique_ptr is the prime example of RAII (Resource
            Acquisition is Initialization).  It's the standard way of
            managing dynamically allocated memory ...
            In fact, unique_ptr can be customized to manage many more
            resources, not just memory.  For example, file handles,
            connection, opaque pointer to C context, and so on.
            The trick is to provide a custom deleter
            "
    [4] unique_ptr with custom deleter
        https://www.nextptr.com/question/qa1366990479/unique_ptr-with-custom-deleter
            "An std::unique_ptr is a smart pointer that exclusively manages
            the lifetime of an object.  The managed object is deleted when
            the unique_ptr is destroyed.
    
            A unique_ptr can be declared and initialized with a user-
            provided custom deleter that is called to destroy the managed
            object.  When no customer deleter is specified, std::unique_ptr
            uses the std::default_delete that calls the delete operator to
            deallocate memory for the object.
    
            A unique_ptr can be used to manage a resource that is acquired
            from a pool or a pre-initialized store of resources.  Another
            case in hand is that we might have to construct an object at a
            shared memory or a custom cache location.  A custom deleter is
            required in those cases to release the resource back to the
            allocator.
            "
    [5] How do I use a custom deleter with a std::unique_ptr member?
        https://stackoverflow.com/questions/19053351/how-do-i-use-a-custom-deleter-with-a-stdunique-ptr-member/19054280#19054280
            "You just need to create a deleter class:
                struct BarDeleter {
                    void operator()(Bar* b) { destroy(b); }
                }
            and provide it as the template argument of unique_ptr.  You'll
            still have to initialize the unique_ptr in your constructors:
                ...
                std::unique_ptr<Bar, BarDeleter> bar;
            "
    [6] Custom Deleters: A Real Example
        https://rachelnertia.github.io/programming/2017/10/30/custom-deleters/
    
    Closes !139 - Create mount points in a private temporary working
                  directory

2025-06-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Define and initialise local variables one per line
    
    Happened to be grepping the code for ' = 0' (assign or initialise to 0)
    and these cases took extra investigation because they didn't follow the
    pattern for local variables of define and initialise one variable per
    statement and per line.  Make them fit that pattern.
    
    Many other matches were found by the grep but they mostly seemed to be
    subsequent assignment of local or member variables after initialisation
    so not applicable to following this pattern.

2025-06-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace pointer assignment of 0 with nullptr
    
    ... because it's more meaningful, strongly typed [1], recommended [2]
    and compatible [3].  Previously changed NULLs to nullptrs [4] for the
    same reason.
    
    [1] nullptr, the pointer literal (since C++11)
        https://en.cppreference.com/w/cpp/language/nullptr
    [2] Bjarne Stroustrup's C++ Style and Technique FAQ, Should I use NULL
        or 0?
        https://www.stroustrup.com/bs_faq2.html#null
            "In C++, the definition of NULL is 0, so there is only an
            aesthetic difference.  I prefer to avoid macros, so I use 0.
            Another problem with NULL is that people sometimes mistakenly
            believe that it is different from 0 and/or not an integer.  In
            pre-standard code, NULL was/is sometimes defined to something
            unsuitable and therefore had/has to be avoided.  That's less
            common these days.
    
            If you have to name the null pointer, call it nullptr; that's
            what it's called in C++11.  Then, "nullptr" will be a keyword.
            "
    [3] What is nullptr in C++? Advantages, Use Cases & Examples
        https://favtutor.com/blogs/nullptr-cpp
            "Advantages of nullptr
            ...
            Compatible: Null pointers are compatible with null pointer
            constants in the C style (such as NULL and 0).  This implies
            that old C code that uses these constants and null pointers can
            communicate with each other in C++.
            "
    [4] commit 40665913bfd9d3267f2d575456bb8d4f3d828c03
        C++11: Convert NULL to nullptr (!117)

2025-06-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update to Google Test 1.16.0 (!137)
    
    Now GParted is set to required C++14 compilation, update to a newer
    version of Google Test [1].  Replace the following files and
    directories:
        LICENSE            from googletest-1.16.0/LICENSE
        README.md          |    googletest-1.16.0/googletest/README.md
        include/           |    googletest-1.16.0/googletest/include/
        src/               |    googletest-1.16.0/googletest/src/
    
    Note the LICENSE file is identical, where as the other files have
    changed.  This includes file additions and removals, hence the change to
    Makefile.am too.
    
    [1] Google Test release v1.16.0
        https://github.com/google/googletest/releases/tag/v1.16.0
            "C++ Language Support
            * GoogleTest requires at least C++14 ...
            * The 1.16.x branch will be the last to support C++14.  Future
              development will require at least C++17.
            "
    [2] commit 1ccb782156b21845800484c97c3309ad160c47f0
        Update to Google Test 1.10.0 (!117)
    
    Closes !137 - Require C++14 compilation and update to Google Test 1.16.0

2025-05-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Require C++14 compilation (!137)
    
    The oldest supported distributions have these versions of GCC:
    
        Distribution           g++ --version
        Debian 11              10.2.1
        RHEL / Rocky Linux 8   8.5.0
        SLES 15 SP6 [2]        7.5.0
        Ubuntu 20.04 LTS       9.4.0
    
    As the minimum version of GCC supports C++14 by default [1] set this as
    a requirement to build GParted.  This is to allow updating to a newer
    version of Google Test.
    
    [1] C++ Standards Support in GCC, C++14 Support in GCC
        https://gcc.gnu.org/projects/cxx-status.html#cxx14
            "GCC has full support for the 2014 C++ standard.
            This mode is the default in GCC 6.1 up until GCC 10 (inclusive);
            "
    [2] SUSE Product Support Lifecycle, SUSE Linux Enterprise Server 15
        https://www.suse.com/lifecycle/#suse-linux-enterprise-server-15
    [3] commit 9f473b70cb7aa124cc095b83c912f777045e913b
        Always require C++11 compilation (!117)
    
    Closes !137 - Require C++14 compilation and update to Google Test 1.16.0

2025-06-12  Aefgh Threenine <aefgh39622@gmail.com>

    Update Thai translation

2025-06-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clarify have ext4 64-bit feature comment
    
    Reword the comment so it is less likely it could be incorrectly read as
    meaning e2fsprogs only enabled large volumes from version 1.42.9.

2025-06-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename FileSystem member variable to m_fs_limits
    
    To make it clear m_fs_limits is a member variable.

2025-06-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop space padding FAT16/32 labels when set (#272)
    
    Space padding was added to work around an old bug in mlabel from
    mtools <= 4.0.13 by commit:
        Pad fat16/32 file system labels with spaces (#700228)
        7ede0ca3cc6fc705ad70868647ff7659255cfc12
    
    1. GParted no longer uses mlabel to set FAT file system labels.
    2. The bug in mlabel was fixed in mtools 4.0.14 released October 2010
       [1].  No currently supported distribution will be using the buggy
       mtools version 4.0.13 or earlier.
    
    Therefore stop space padding FAT file system labels.
    
    [1] GNU mtools 4.0.14 released
        https://lists.gnu.org/archive/html/info-mtools/2010-10/msg00000.html
            Date: Sun, 17 Oct 2010
            ...
            Improvements since the 4.0.13 release are:
            ...
            * Fixed buffer size issue in mlabel
    
    Closes #272 - GParted waits forever setting FAT FS label when it matches
                  existing root folder entry

2025-06-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ignore FAT16/32 label reported as NO NAME from old fatlabel (#272)
    
    On a recent distribution with dosfstools 4.2 create a FAT file system
    without a label and print the label.  The empty label is reported.
        # mkfs.fat /dev/sdb1
        mkfs.fat 4.2 (2021-01-31)
        # fatlabel /dev/sdb1
        # blkid -s LABEL /dev/sdb1
        # mlabel -s -i /dev/sdb1
         Volume has no label
    
    On an older distribution (RHEL 8 or SLES 15) with dosfstools 4.1 do the
    same.  fatlabel reports the label as "NO LABEL" where as other tools
    report the empty label.
        # mkfs.fat /dev/sdb1
        mkfs.fat 4.1 (2017-01-24)
        # fatlabel /dev/sdb1
        NO NAME
        # blkid -s LABEL /dev/sdb1
        # mlabel -s -i /dev/sdb1
         Volume has no label
    
    Quoting the fatlabel manual page from dosfstools 4.2:
        COMPATIBILITY and BUGS
            For historic reasons FAT label is stored in two different
            locations: in the boot sector and as a special volume label
            entry in the root directory.  ...[equivalent to MS-DOS >= 5.00
            and Windows >= 98] read FAT label only from the root directory.
            Absence of the volume label in the root directory is interpreted
            as empty or none label, even if boot sector contains some valid
            label.
            ...
            Since version 4.2, fatlabel reads a FAT label only from the root
            directory (like MS-DOS and Windows systems), but changes a FAT
            label in both locations.  In version 4.2 was fixed handling of
            empty labels and labels which starts with a byte 0xE5.  Also in
            this version was added support for non-ASCII labels according to
            the specified DOS codepage and were added checks if a new label
            is valid.
    
    To avoid GParted displaying the FAT label as "NO NAME" make GParted
    treat it as empty, but only when read with fatlabel 4.1 and earlier.
    
    Closes #272 - GParted waits forever setting FAT FS label when it matches
                  existing root folder entry

2025-06-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Mostly use fatlabel for FAT16/32 file system labelling (#272)
    
    Create a FAT file system with a directory named TEST in the root
    directory:
        # mkfs.fat -F 32 /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # mkdir /mnt/1/TEST
        # umount /mnt/1
    
    Use GParted to set the file system label to TEST.  GParted runs this
    mlabel command, but it never completes because the command is prompting
    for input which GParted never provides:
        # mlabel -i /dev/sdb1 ::TEST
        Long file name "TEST" already exists.
        a)utorename A)utorename-all r)ename R)ename-all
        s)kip S)kip-all q)uit (aArRsSq):
    
    Some of the mtools commands provide the -D option to specify how name
    clashing should be handled without prompting.  However mlabel doesn't
    provide that option so if a name clash occurs it will always prompt for
    input and wait.
        $ mcopy --help
        Mtools version 4.0.48, dated February 22nd, 2025
        Usage: mcopy [-spatnmQVBT] [-D clash_option] sourcefile targetfile
               mcopy [-spatnmQVBT] [-D clash_option] sourcefile [sourcefiles...] targetdirectory
               mcopy [-tnvm] MSDOSsourcefile
    
        $ mlabel -s -D a -i /dev/sdb1
        mlabel: invalid option -- 'D'
        Mtools version 4.0.48, dated February 22nd, 2025
        Usage: mlabel [-vscVn] [-N serial] drive:
    
    Therefore switch from using mlabel to fatlabel to write the label.  Also
    use the same command for reading the label for consistency.  However
    fatlabel --reset option only exists in the latest dosfstools 4.2.
    Therefore older but still supported distributions with dosfstools 4.1
    (specifically RHEL 8 and SLES 15) can't use this option.  So continue to
    use mlabel -c to clear the label.
    
    GParted partially sanitises the label by removing prohibited characters,
    making it upper case and padding with spaces.  However the FAT label is
    in the character set of one of the OEM code pages [1].  GParted has
    always ignored converting from it's UTF-8 entered label to any
    particular OEM code page.  Any difference between how mlabel and
    fatlabel handle non-ASCII characters will also be ignored.
    
    [1] label (command)
        https://en.wikipedia.org/wiki/Label_%28command%29#FAT_volume_labels
            "FAT volume labels
            FAT volumes have the following limitations:
            * Volume labels can contain as many as 11 character bytes and
              can include spaces, but not tabs.  The characters are in the
              OEM code page of the system that created the label.
            "
    
    Closes #272 - GParted waits forever setting FAT FS label when it matches
                  existing root folder entry

2025-06-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prefix DialogFeature member variables with m_
    
    This is working towards having all member variables start with m_ to
    make it abundantly clear that they are members of a class.  Recently
    class member variables have been renamed using the m_ prefix and others
    have been created using this naming convention.
    
    [1] commit 188ffcc06b54e63d5055fac227db06c0d89f31bd
        Prefix ext2 member variables with m_ and initialise all POD members
    [2] commit 63c6b33aee3c2fb8e873aff067d2a05f03fba644
        Rename fat16 member variable to m_specific_fstype
    [3] commit bac9e399b83ad265f6e1d50e0c010edc5b2e15bc
        Prefix xfs member variables with m_ and initialise POD member
    [4] commit 181a8017348371178f7360337eeef0b934276fdf
        Rename udf member variable to m_old_mkudffs
    [5] ea7bd0d419acfa0bd60c3f3d4bd9edca4972a5c8
        Rename Dialog_Progress member variable to m_curr_op
    [6] ab2d4f5ee6a1e139df3f4340e4247954e0f2a6f2
        Create BlockSpecial class and use in LVM2_PV_Info (#767842)
    [7] 0ca8ed73696eaf12d6c32828e0d746e7d0e3b442
        Write a generic progress bar class (#760709)

2025-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update GParted includes in Win_GParted.h and .cc
    
    Apply the Include What You Use principle [1][2][3].  Just doing it for
    GParted's own header files for now as there are so many Gtkmm headers
    which would need checking.  Mostly add but also remove GParted headers
    used and no longer used.
    
    Add missing #includes to Win_GParted.h:
        #include "Operation.h"  // for Operation class
        #include "Utils.h"      // for FSType enum
    Removed no longer needed #includes from Win_GParted.h:
        // Since commit e801689680ea525726a98b3bd9b91f1c10734628
        // "Remove now duplicated Win_GParted::display_partitions member..."
        #include "PartitionVector.h"
    
    Add missing #includes to Win_GParted.cc:
        #include "FileSystem.h"  // for FileSystem::get_generic_text() and
                                 // struct FS_Limits
        #include "Operation.h"   // for OperationType enum
    
    [1] Why include what you use?
        https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/WhyIWYU.md
    [2] Include What You Use
        https://www.fluentcpp.com/2021/01/01/include-what-you-use/
    [3] Is it good practice to rely on headers being included transitively?
        https://softwareengineering.stackexchange.com/questions/262019/is-it-good-practice-to-rely-on-headers-being-included-transitively

2025-06-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid theoretical nullptr dereference in File System Support dialog (#282)
    
    Now that the previous commit accepts that looking up a stock icon may
    fail, which results in Utils::mk_pixbuf() returning the nullptr, the
    rest of the GParted code needs to handle this possibility too.  With
    this debugging change applied, mk_pixbuf() always returns a nullptr:
        --- a/src/Utils.cc
        +++ b/src/Utils.cc
    @@ -176,7 +176,8 @@ Glib::RefPtr<Gdk::Pixbuf> Utils::mk_pixbuf(Gtk::Widget& widget,
                                                    const Gtk::StockID& stock_id,
                                                    Gtk::IconSize icon_size)
         {
        -    Glib::RefPtr<Gdk::Pixbuf> theme_icon = widget.render_icon_pixbuf(stock_id, icon_size);
        +    static const Gtk::BuiltinStockID UNKNOWN = { ((GtkStock)"unknown") };
        +    Glib::RefPtr<Gdk::Pixbuf> theme_icon = widget.render_icon_pixbuf(UNKNOWN, icon_size);
             if (! theme_icon)
                 return theme_icon;
    
    In the DialogFeatures constructor icon_yes and icon_no are now assigned
    the nullptr which it then dereferences with icon_yes->get_width() and
    icon_yes->get_height(), causing a crash.  Fix the code to be safe
    against this possibility.
    
    Closes #282 - Crash due to not checking for failure to load icon

2025-06-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash from dereferencing a nullptr in Utils::mk_pixbuf() (#282)
    
    Debian bug 984953 [1] reported a crash from a nullptr dereference.  The
    captured backtrace was:
        (gdb) backtrace
        #0  Gdk::Pixbuf::gobj (this=0x0) at ../gdkmm/pixbuf.h:389
        #1  Gdk::Pixbuf::get_width (this=0x0) at pixbuf.cc:517
        #2  0x0000aaaaaab89ca4 in GParted::Utils::mk_pixbuf (widget=..., stock_id=..., icon_size=..., icon_size@entry=...) at /usr/include/glibmm-2.4/glibmm/refptr.h:259
        #3  0x0000aaaaaab92020 in GParted::Win_GParted::refresh_combo_devices (this=0xffffffffe960) at /usr/include/gtkmm-3.0/gtkmm/enums.h:2870
        #4  0x0000aaaaaab95980 in GParted::Win_GParted::menu_gparted_refresh_devices (this=<optimized out>) at Win_GParted.cc:1674
        #5  0x0000aaaaaab95e2c in GParted::Win_GParted::initial_device_refresh (data=<optimized out>) at Win_GParted.cc:1605
        #6  0x0000fffff6b8dab4 in g_main_dispatch (context=0xaaaaaaca6f10) at ../../../glib/gmain.c:3325
        #7  g_main_context_dispatch (context=0xaaaaaaca6f10) at ../../../glib/gmain.c:4043
        #8  0x0000fffff6b8de5c in g_main_context_iterate (context=0xaaaaaaca6f10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4119
        #9  0x0000fffff6b8e1b0 in g_main_loop_run (loop=loop@entry=0xaaaaabb23860) at ../../../glib/gmain.c:4317
        #10 0x0000fffff70b98f0 in gtk_main () at ../../../../gtk/gtkmain.c:1328
        #11 0x0000aaaaaab2138c in main (argc=<optimized out>, argv=<optimized out>) at main.cc:62
    
    GParted is still using Gtk stock icons.  All attempts at re-creating
    this crash by deleting icon files failed because if the desktop theme
    doesn't provide the icons, the Gtk library falls back on using the
    builtin copies of the stock icons instead.  It is unknown how the
    reported managed to trigger this crash.  The only known way to reproduce
    this crash is by changing the GParted source code to request a
    non-existent stock icon.  This change was used:
        --- a/src/Win_GParted.cc
        +++ b/src/Win_GParted.cc
        @@ -743,8 +743,9 @@ void Win_GParted::refresh_combo_devices()
             {
                 //combo...
                 treerow = *( liststore_devices ->append() ) ;
        +        static const Gtk::BuiltinStockID UNKNOWN = { ((GtkStock)"unknown") };
                 treerow[ treeview_devices_columns .icon ] =
        -            Utils::mk_pixbuf(*this, Gtk::Stock::HARDDISK, Gtk::ICON_SIZE_LARGE_TOOLBAR);
        +            Utils::mk_pixbuf(*this, UNKNOWN, Gtk::ICON_SIZE_LARGE_TOOLBAR);
                 treerow[ treeview_devices_columns .device ] = devices[ i ] .get_path() ;
                 treerow[ treeview_devices_columns .size ] = "(" + Utils::format_size( devices[ i ] .length, devices[ i ] .sector_size ) + ")" ;
    
    The bug in Utils::mk_pixbuf() is that render_icon_pixbuf() returned a
    nullptr and was then dereferenced a few lines lower by
    theme_icon->get_width().
    
    Testing this fix with the above crash reproducing change applied results
    in the GUI simply not showing an icon with each device name in the
    device combo box selector.
    
    [1] libgtkmm-3.0-1v5: GParted crashes on Gdk::Pixbuf::get_width()
        const ()
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984953
    
    Closes #282 - Crash due to not checking for failure to load icon

2025-06-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove duplicate assignment of a local variable in move_filesystem()
    
    Only 8 lines above local variable success was initialised to false with
    no intervening use.  Remove this second assignment of success to the
    same value.

2025-06-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Spell local variable success correctly in GParted_Core methods

2025-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return by value from DMRaid::get_partition_dev_map_entries() (!135)
    
    Closes !135 - Refactor DMRaid to a static class interface and make
                  mutating getters return by value

2025-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return by value from DMRaid::get_affected_dev_map_entries() (!135)
    
    Closes !135 - Refactor DMRaid to a static class interface and make
                  mutating getters return by value

2025-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return by value from DMRaid::get_dmraid_dir_entries() (!135)
    
    Closes !135 - Refactor DMRaid to a static class interface and make
                  mutating getters return by value

2025-05-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return by value from DMRaid::get_devices() (!135)
    
    Getters normally either return a value or a reference.  get_devices()
    does neither.  Instead it returns no value and mutates the passed
    parameter assigning it the "returned" value.  This is unusual [1].
    
    As the returned value is created dynamically, each string in the vector
    is prefixed with DEV_MAPPER_PATH, it will have to be returned by value.
    
    C++ has NVRO (Named Value Return Optimization) [2][3] which can optimise
    away the object copies involved in object return by value.
    
    [1] Make your functions functional
        https://www.fluentcpp.com/2016/11/22/make-your-functions-functional/
            "Expressing the outputs of a function
    
            The rule here is:
            Outputs should come out by the return type.
                Output f(const Input& input);
    
            This does sound natural, but there are many cases where we are
            reluctant to do this, and instead a more clumsy way is often
            seen: passing the output in parameter as a
            reference-to-not-const (T&), so like:
                void f(const Input& input, Output& output);
    
            Then the function would be in charge of filling this output
            parameter.
            There are several drawbacks with using this technique:
            *   It is not natural.  Outputs should come out by the return
                type.  With the above code, you end up with an awkward
                syntax at call site:
                    Output output;
                    f(input, output);
    
                As apposed to the simpler syntax:
                    Output output = f(input);
            "
    
    [2] Copy elision
        https://en.cppreference.com/w/cpp/language/copy_elision.html
            "In a return statement in a function with a class return type,
            when the operand is the name of a non-volatile object obj with
            automatic storage duration (other than a function parameter or a
            handler parameter), the copy-initialization of the result object
            can be omitted by constructing obj directly into the function
            call's result object.  This variant of copy elision is known as
            named return value optimization (NRVO).
            "
    
    [3] Return value optimizations
        https://www.fluentcpp.com/2016/11/28/return-value-optimizations/
    
    Closes !135 - Refactor DMRaid to a static class interface and make
                  mutating getters return by value

2025-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert DMRaid class to a static interface (!135)
    
    The DMRaid module had a pseudo multi-object interface and used the
    constructor to load the cache.  However all the data in the class is
    static so a DMRaid object is empty.  But a DMRaid object was still
    needed just to call the member functions.
    
    Make all the member functions static and provide an explicit
    load_cache() method.
    
    Previous examples of doing this:
    [1] commit a94be2da05c65b36c290d993c89f5580e85042ca
        Switch to static class interface for FS_Info
    [2] commit 912766c2e11aab2cecd916bdc2027cc14087c4a0
        Switch to a static interface for Proc_Partitions_Info
    
    Closes !135 - Refactor DMRaid to a static class interface and make
                  mutating getters return by value

2023-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename method to update_button_resize_move_sensitivity()
    
    ... from Check_Change() to better reflect specifically what the method
    does.
    
    And yes all the derived dialog classes New, Resize/Move and Copy/Paste
    inherit and maintain this button.  But it is only displayed in the
    Resize/Move dialog, as controlled by Set_Confirm_Button().

2025-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename function to set_C_locale()
    
    Makes the name fully descriptive of what the function does and mirrors
    the name of the use_C_locale parameter controlling its use.

2025-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wrap internal implementation of PasswordRAMStore in the unnamed namespace
    
    PasswordRAMStore class was already coded using private implementation
    PWStore class.  Wrap PWStore class in the unnamed namespace so the
    compiler makes the type local to the translation unit [1][2].
    
    The single_pwstore object was already local because of it's static
    qualifier.  It is included in the unnamed namespace for completeness but
    this makes no difference because the static qualifier and being in the
    unnamed namespace are both making the variable local to the translation
    unit.
    
    Keep the static qualifier as a per variable / per function reminder of
    local linkage.
    
    [1] Why should you prefer unnamed namespaces over static functions?
        https://stackoverflow.com/questions/154469/why-should-you-prefer-unnamed-namespaces-over-static-functions
            "Static only applies to names of objects, functions, and
            anonymous unions, not to type declarations.
            "
    
    [2] How are unnamed namespaces superior to the static keyword?
        [duplicate]
        https://stackoverflow.com/questions/4422507/how-are-unnamed-namespaces-superior-to-the-static-keyword
            "unnamed namespace's are superior to the static keyword,
            primarily because the keyword static applies only to the
            variables declarations and functions, not to the user-defined
            types.
            "

2025-05-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash from violating the One Definition Rule with CommandStatus (#283)
    
    Compile GParted without optimisation.
        $ cd src
        $ make clean
        $ make CXXFLAGS='-g -O0'
    
    Run GParted.  It always crashes before the main window is fully loaded.
        # ./gpartedbin
        GParted 1.7.0-git
        configuration --enable-libparted-dmraid
        libparted 3.2
        Segmentation fault (core dumped)
        # gdb ./gpartedbin core --quiet --ex backtrace -ex quit
        ...
        Core was generated by `./gpartedbin'.
        Program terminated with signal SIGSEGV, Segmentation fault.
        ...
        [Current thread is 1 (Thread 0x7f50a2646680 (LWP 2920421))]
        #0  0x00007f509cf18891 in __GI___libc_free (mem=0x2c8fe66e1aff58)
            at malloc.c:3159
        #1  0x00000000004954ec in GParted::CommandStatus::~CommandStatus()
            (this=0x7ffe6e1aff20, __in_chrg=<optimized out>)
            at OperationDetail.cc:44
        #2  0x00000000004aeeca in GParted::Utils::execute_command(Glib::ustring const&, char const*, Glib::ustring&, Glib::ustring&, bool)
            (command=..., input=0x0, output=..., error=..., use_C_locale=true)
            at Utils.cc:705
        #3  0x00000000004ae9fd in GParted::Utils::execute_command(Glib::ustring const&, Glib::ustring&, Glib::ustring&, bool)
            (command=..., output=..., error=..., use_C_locale=true)
            at Utils.cc:692
        #4  0x00000000004d1f07 in GParted::btrfs::get_filesystem_support() (
            this=0x1910940) at btrfs.cc:105
        #5  0x00000000004a3bc2 in GParted::SupportedFileSystems::find_supported_filesystems()
            (this=0x19107f0) at SupportedFileSystems.cc:123
        #6  0x000000000045f50e in GParted::GParted_Core::GParted_Core()
            (this=0x7ffe6e1b1250) at GParted_Core.cc:89
        #7  0x00000000004b208f in GParted::Win_GParted::Win_GParted(std::vector<Glib::ustring, std::allocator<Glib::ustring> > const&)
            (this=0x7ffe6e1b0820, user_devices=std::vector of length 1, capacity 1 = {...}, __in_chrg=<optimized out>, __vtt_parm=<optimized out>)
            at Win_GParted.cc:73
        #8  0x00000000004e6f61 in main(int, char**)
            (argc=2, argv=0x7ffe6e1b1458) at main.cc:61
    
    This crash was caused because:
    *   OperationDetail.cc defines struct CommandStatus.
    *   Before commit [1] OperationDetail.cc struct CommandStatus was just
        a collection of POD (Plain Old Data) members, without a constructor
        or destructor.
    *   In C++ a structure is just a class with all public members.
    *   Commit [1] added output and error members to OperationDetail.cc
        struct CommandStatus which are classes themselves with constructors
        and destructors which need calling.  Therefore struct CommandStatus
        required a constructor and destructor.  The default constructor was
        defined in the code and the compiler implicitly generated the
        destructor named CommandStatus::~CommandStatus().
    *   Utils.cc defines class CommandStatus including with members of type
        Glib::Mutex and Glib::Cond which are classes themselves with
        constructors and destructors.  Therefore the compiler implicitly
        generates a default constructor and destructor named
        CommandStatus::CommandStatus() and CommandStatus::~CommandStatus()
        respectively.
    *   This breaks the One Definition Rule in C++ [2][3] with two different
        CommandStatus types.
    *   Compilation of OperationDetail.cc and Utils.cc generates different
        code for for the different struct/class CommandStatus objects but
        identically named constructor and destructor,
        CommandStatus::CommandStatus() and CommandStatus::~CommandStatus()
        respectively.
    *   When linked the gpartedbin executable must have ended up with the
        OperationDetail.cc CommandStatus destructor, hence why the
        backtrace looks like:
            #1 GParted::CommandStatus::~CommandStatus()
               at OperationDetail.cc:44
            #2 GParted::Utils::execute_command() at Utils.cc:705
        with Utils::execute_command() unexpectedly calling the
        OperationDetail.cc struct CommandStatus destructor.
    
    The reason this doesn't crash when compiled with optimisation (-O2) is
    that the Utils.cc class CommandStatus constructor and destructor methods
    get inlined into Utils::execute_command(), likely because there's only a
    single occurrence of an object of that type.  So there isn't a second
    function named CommandStatus::~CommandStatus() for the linker to choose
    from.
    
    When compiled without optimisation both object files provide the same
    named CommandStatus constructor and destructor:
        $ rm Utils.o OperationDetail.o
        $ make CXXFLAGS='-g -O0' Utils.o OperationDetail.o
    Symbols in Utils.o:
        $ objdump --syms --demangle Utils.o | grep ' GParted::CommandStatus::'
        0000000000000000 l       .group 0000000000000000 GParted::CommandStatus::CommandStatus()
        0000000000000000 l       .group 0000000000000000 GParted::CommandStatus::~CommandStatus()
        000000000000242a g     F .text  0000000000000087 GParted::CommandStatus::store_exit_status(int, int)
        00000000000024b2 g     F .text  0000000000000083 GParted::CommandStatus::execute_command_eof()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusC2Ev   0000000000000054 GParted::CommandStatus::CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusC2Ev   0000000000000054 GParted::CommandStatus::CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusD2Ev   000000000000002f GParted::CommandStatus::~CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusD2Ev   000000000000002f GParted::CommandStatus::~CommandStatus()
    Symbols in OperationDetail.o:
        $ objdump --syms --demangle OperationDetail.o | grep ' GParted::CommandStatus::'
        0000000000000000 l       .group 0000000000000000 GParted::CommandStatus::CommandStatus()
        0000000000000000 l       .group 0000000000000000 GParted::CommandStatus::~CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusC2Ev   00000000000071 GParted::CommandStatus::CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusC2Ev   00000000000071 GParted::CommandStatus::CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusD2Ev   0000000000002f GParted::CommandStatus::~CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusD2Ev   0000000000002f GParted::CommandStatus::~CommandStatus()
                         ^^    ^
           Symbol flags: 1234567
    Legend of some of the symbol flags reported by objdump:
        flag 1: "l" local, "g" global, " " neither symbol
        flag 2: "w" weak, " " strong symbol
        flag 7: "F" function name, " " normal symbol
    
    However when compiled with optimisation, Utils.o doesn't provide a
    separate CommandStatus constructor and destructor because they've both
    been inlined:
        $ rm Utils.o OperationDetail.o
        $ make CXXFLAGS='-g -O2' Utils.o OperationDetail.o
    Symbols in Utils.o:
        $ objdump --syms --demangle Utils.o | grep ' GParted::CommandStatus::'
        0000000000000020 g     F .text  000000000000054 GParted::CommandStatus::execute_command_eof()
        0000000000000ec0 g     F .text  000000000000060 GParted::CommandStatus::store_exit_status(int, int)
    Symbols in OperationDetail.o:
        $ objdump --syms --demangle OperationDetail.o | grep ' GParted::CommandStatus::'
        0000000000000000 l       .group 0000000000000000 GParted::CommandStatus::~CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusD2Ev   00000000000017 GParted::CommandStatus::~CommandStatus()
        0000000000000000  w    F .text._ZN7GParted13CommandStatusD2Ev   00000000000017 GParted::CommandStatus::~CommandStatus()
    
    The fix is to make sure the two different CommandStatus types are either
    uniquely named or that they are truly private in each separate object
    file.
    
    Options are:
    1.  Use unique names, for example:
            CommandStatus_OD    (in OperationDetail.cc)
            CommandStatus_U     (in Utils.cc)
    
        Simple but ugly.
    
    2.  Place CommandStatus types into their respective classes to have
        unique names by the fact that a class is a new name scope.  Fully
        qualified names would become:
            GParted::OperationDetail::CommandStatus
            GParted::Utils::CommandStatus
        Code would look like:
            class Utils
            {
            public:
                ...
                class CommandStatus;
    
        In Utils.h, class CommandStatus would have to be public to allow
        free function (non-class member function) _store_exit_status()
        access to CommandStatus internals.  This is because
        _store_exit_status() is registered with Glib's g_child_watch_add()
        as a callback.  Which has to be used to avoid an old bug /
        limitation in Glibmm's equivalent
        Glib::signal_child_watch().connect() [4][5].
    
        Putting what is intended to be private internal implementation
        details into the class declaration (interface description),
        especially as public members, doesn't seem like the right thing to
        do.
    
    3.  Use the unnamed namespace to make the CommandStatus types local to
        each translation unit [6][7][8][8][10][11].  This technique is also
        well used in the source code of the gtkmm and glibmm C++ libraries.
        Namespaces, including the unnamed namespace, can either be at the
        top level or nested within other namespaces.  Nesting the unnamed
        namespace within the GParted namespace will allow access to
        identifiers without having to use the GParted:: prefix.  Like this:
            namespace GParted
            {
                namespace  // unnamed
                {
                    class CommandStatus
                    {
                        ...
                    };
                }
                ...
            }
    
        The unnamed namespace goes at the beginning of the .cc file just so
        all the private variables, functions and types in it are defined
        before they are used as they don't have declarations in the .h file
        to keep them private.
    
        Choose this method to fix the issue.
    
    The minimum requirement is to just move the CommandStatus class
    definitions and member functions into the unnamed namespace.  Other
    associated helper free functions are already static, so local to the
    translation unit, however it is logical to keep everything together and
    move those into the unnamed namespace too.
    
    With this change applied the two different CommandStatus types are
    local to each translation unit (all the member functions are local ("l"
    flag set) in both object files):
        $ rm Utils.o OperationDetail.o
        $ make CXXFLAGS='-g -O0' Utils.o OperationDetail.o
        $ objdump --syms --demangle Utils.o | egrep ' GParted::\(anonymous namespace\)::CommandStatus::'
        0000000000000000 l     F .text  0000000000000087 GParted::(anonymous namespace)::CommandStatus::store_exit_status(int, int)
        0000000000000088 l     F .text  0000000000000083 GParted::(anonymous namespace)::CommandStatus::execute_command_eof()
        00000000000025be l     F .text  0000000000000054 GParted::(anonymous namespace)::CommandStatus::CommandStatus()
        00000000000025be l     F .text  0000000000000054 GParted::(anonymous namespace)::CommandStatus::CommandStatus()
        0000000000002612 l     F .text  000000000000002f GParted::(anonymous namespace)::CommandStatus::~CommandStatus()
        0000000000002612 l     F .text  000000000000002f GParted::(anonymous namespace)::CommandStatus::~CommandStatus()
        $ objdump --syms --demangle OperationDetail.o | egrep ' GParted::\(anonymous namespace\)::CommandStatus::'
        0000000000000000 l     F .text  0000000000000071 GParted::(anonymous namespace)::CommandStatus::CommandStatus()
        0000000000000000 l     F .text  0000000000000071 GParted::(anonymous namespace)::CommandStatus::CommandStatus()
        000000000000245c l     F .text  000000000000002f GParted::(anonymous namespace)::CommandStatus::~CommandStatus()
        000000000000245c l     F .text  000000000000002f GParted::(anonymous namespace)::CommandStatus::~CommandStatus()
    
    [1]  commit 3c26cda2b2dddfae49e003fe4b44f7d79802ceaf
         Restore progress bars when parsing FS command output (!132)
    
    [2]  C++: Different classes with the same name in different translation
         units
         https://stackoverflow.com/questions/9364720/c-different-classes-with-the-same-name-in-different-translation-units
    
    [3]  Working Draft, Standard for Programming Language C++
         (N3242=11-0012)
         [A.K.A. Working Draft of C++ 11 (ISO/IEC 14882:2011)]
         https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf
            "3.2 One Definition Rule
            ...
            Every program shall contain exactly one definition of every
            non-inline function or variable that is odr-used in that
            program, no diagnostic required.
            ...
            There can be more than one definition of a class type, ...  in a
            program provided that each definition appears in a different
            translation unit, and provided the definitions satisfy the
            following requirements.  Given such an entity named D defined in
            more than one translation unit, then
            - each definition of D shall consist of the same sequence of
              tokens;
            "
    
    [4]  commit c36934aca5d0691953fc0eed15ee61bc027ca086
         Avoid glibmm GSource bug/crash (#697727)
    
    [5]  glibmm: Glib::SignalChildWatch Class Reference
         http://web.archive.org/web/20210306130022/https://developer.gnome.org/glibmm/unstable/classGlib_1_1SignalChildWatch.html
            "Glib::signal_child_watch().connect(sigc::ptr_fun(& child_watch_handler), pid);
    
            This method is not thread-safe.  You should call it, or
            manipulate the returned sigc::connection object, only from the
            thread where the SignalChildWatch object's MainContext runs.
            "
    
    [6]  Why should you prefer unnamed namespaces over static functions?
         https://stackoverflow.com/questions/154469/why-should-you-prefer-unnamed-namespaces-over-static-functions
            "Static only applies to names of objects, functions, and
            anonymous unions, not to type declarations."
    
    [7]  How are unnamed namespaces superior to the static keyword?
         [duplicate]
         https://stackoverflow.com/questions/4422507/how-are-unnamed-namespaces-superior-to-the-static-keyword
    
    [8]  Learn C++, 7.6 - Internal linkage
         https://www.learncpp.com/cpp-tutorial/internal-linkage/
            "An identifier with internal linkage can be seen and used within
            a single translation unit, but it is not accessible from other
            translation units.  This means that if two source files have
            identically named identifiers with internal linkage, those
            identifiers will be treated as independent (and do not result in
            an ODR violation for having duplicate definitions).
            ...
            static vs unnamed namespaces
            ...  Unnamed namespaces can give internal linkage to a wider
            range of identifiers (e.g. type identifiers), and they are
            better suited for giving many identifiers internal linkage.
            "
    
    [9]  Learn C++, 7.14 - Unnamed and inline namespaces
         https://www.learncpp.com/cpp-tutorial/unnamed-and-inline-namespaces/
            "Unnamed namespaces are typically used when you have a lot of
            content that you want to ensure stays local to a given
            translation unit, ...  Unnamed namespaces will also keep
            program-defined types (...) local to the translation unit,
            something for which there is no alternative equivalent mechanism
            to do.
            "
    
    [10] Tip of the Week #186: Prefer to Put Functions in the Unnamed
         Namespace
         https://abseil.io/tips/186
    
    [11] Understanding Unnamed Namespaces in C++: Why, What, and How to Use
         Them
         https://medium.com/@mane.tako/understanding-unnamed-namespaces-in-c-7d41d367fd47
            "Unnamed namespaces, sometimes referred to as anonymous
            namespaces, offer a powerful tool to encapsulate implementation
            details, prevent name clashes, and enhance code structure.
            ...
            Unnamed Namespace Inside a Named Namespace
    
            An unnamed namespace nested inside a named namespace is often
            used to hide implementation details specific to that namespace.
            This structure can prevent name clashes when using unity builds
            or when a named namespace is spread across multiple files.
            "
    
    Closes #283 - GParted 1.7.0-git always crashes when compiled without
                  optimisation in CommandStatus::~CommandStatus()

2025-05-28  Vasil Pupkin <3abac@3a.by>

    Update Belarusian translation

2025-01-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Glib:: namespace qualifier to use of file_test()
    
    Not sure how this code can be compiled but file_test() is in the Glib::
    namespace [1] so add the missing qualifier.
    
    [1] #include <glibmm/fileutils.h>
            namespace Glib
            {
            ...
            bool file_test(const std::string& filename, FileTest test);

2025-05-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix Google Test compilation against GCC 15 libstdc++ (#281)
    
    On Fedora 42 building Google Test library as part of unit testing fails
    like this:
        $ make check
        ...
        make[3]: Entering directory '/home/fedora/programming/c/gparted/lib/gtest'
        ...
        libtool: compile:  g++ -std=gnu++11 ... -c src/gtest_main.cc ...
        In file included from src/gtest-all.cc:42:
        ./src/gtest-death-test.cc: In function 'pid_t testing::internal::ExecDeathTestSpawnChild(char* const*, int)':
        ./src/gtest-death-test.cc:1385:26: error: 'uintptr_t' does not name a type
         1385 |         reinterpret_cast<uintptr_t>(stack_top) % kMaxStackAlignment == 0);
              |                          ^~~~~~~~~
        ./src/gtest-death-test.cc:308:38: note: in definition of macro 'GTEST_DEATH_TEST_CHECK_'
          308 |     if (!::testing::internal::IsTrue(expression)) { \
              |                                      ^~~~~~~~~~
        ./src/gtest-death-test.cc:49:1: note: 'uintptr_t' is defined in header '<cstdint>'; this is probably fixable by adding '#include <cstdint>'
           48 | # include <limits.h>
          +++ |+#include <cstdint>
           49 |
        make[3]: *** [Makefile:504: src/gtest-all.lo] Error 1
    
    It turns out that gtest-all.cc, which includes gtest-death-test.cc,
    received the definition of uintptr_t via this chain of includes in
    Fedora 41, with GCC 14 libstdc++:
        .../gparted/lib/gtest/src/gtest-all.cc
           38 | #include "gtest/gtest.h"
        .../gparted/lib/gtest/include/gtest/gtest.h
           57 | #include <memory>
        /usr/include/c++/14/memory
           76 | #  include <bits/align.h>
        /usr/include/c++/14/bits/align.h
           34 | #include <stdint.h>     // uintptr_t
        /usr/lib/gcc/x85_64-redhat-linux/14/include/stdint.h
            9 | #  include_next <stdint.h>
        /usr/include/stdint.h
           79 | typedef unsigned long int       uintptr_t;
    (Tracked down using g++ -E, stop after the preprocessing stage).
    
    However Fedora 42 updated to GCC 15 which included this change to
    libstdc++ [1], which removed #include <stdint.h> from <bits/align.h>,
    hence the above compilation failure.  As discussed in these recent
    GParted commits [2][3] it is bad practice to depend on headers being
    included transitively [4] for exactly this reason.  Fix by directly
    including stdint.h in gtest-death-test.cc.
    
    [1] libstdc++: Remove unnecessary use of <stdint.h>
        https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a817a4a5a6d94da9127af3be9f84a74e3076ee2
        https://github.com/gcc-mirror/gcc/commit/3a817a4a5a6d94da9127af3be9f84a74e3076ee2
    [2] 9546bf1c93f7850856b8767872129c80f37f4ce8
        Add sigc++ #includes to many files
    [3] a488502814a6cbcd44ac6fe1f374148ff7c73113
        Fix #includes for the FileSystem module
    [4] Is it good practice to rely on headers being included transitively?
        https://softwareengineering.stackexchange.com/questions/262019/is-it-good-practice-to-rely-on-headers-being-included-transitively
    
    Closes #281 - make check fails to build Google Test library on Fedora 42
                  because uintptr_t is undefined

2024-12-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix #includes for the FileSystem module
    
    Apply the Include What You Use [1] principle.
    
    Add missing #includes in FileSystem.cc:
        #include "OperationDetail.h"  // for OperationDetail class.
        #include <stdio.h>            // for sprintf().
        #include <stdlib.h>           // for mkdtemp().
        #include <unistd.h>           // for rmdir().
        #include <glibmm/ustring.h>   // for Glib::ustring class.
    
    Fix #includes for FileSystem.h.  Remove these #includes as nothing is
    used from them:
        #include "Operation.h"
        #include <fstream>
        #include <sys/stat.h>
    Add these includes:
        #include "OperationDetail.h"  // for OperationDetail type.
        #include <glibmm/ustring.h>   // for Glib::ustring type.
    
    It turns out that linux_swap.cc previously got access to #include
    <fstream> via FileSystem.h including it, so removing it from there
    breaks compilation of linux_swap.cc.  Apply the Include What You Use
    principle and add this:
        #include <fstream>  // for std::ifstream class.
    
    [1] Is it good practice to rely on headers being included transitively?
        https://softwareengineering.stackexchange.com/questions/262019/is-it-good-practice-to-rely-on-headers-being-included-transitively
            "A corollary is that you should never include a header in
            another header unless it is explicitly needed in that file.
            "

2024-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add sigc++ #includes to many files
    
    Lots of GParted header and source files use sigc:: name scope references
    but almost none of them #include the headers providing the definitions.
        $ fgrep -l sigc:: include/*.h src/*.cc | wc -l
        30
        $ fgrep -l '#include <sigc++/' include/*.h src/*.cc | wc -l
        2
    
    Include What You Use [1][2].
    
    [1] Is it good practice to rely on headers being included transitively?
        https://softwareengineering.stackexchange.com/questions/262019/is-it-good-practice-to-rely-on-headers-being-included-transitively
            "You should always include all headers defining any objects used
            in a .cpp file in that file regardless of what you know about
            what's in those files.  You should have include guards in all
            header files to make sure that including headers multiple times
            does not matter.
    
            The reasons:
            * This makes it clear to developers who read the source exactly
              what the source file in question requires.
            * This avoids issues where refactored headers cause compilation
              issues when they no longer require particular headers
              themselves.
    
            A corollary is that you should never include a header in another
            header unless it is explicitly needed in that file.
            "
    [2] Why include what you use?
        https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/WhyIWYU.md

2025-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Comment accepting non-zero exit status from FSCK commands

2024-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove method FileSystem::set_status()
    
    FileSystem::set_status() method only contained this single line of code:
        operationdetail.get_last_child().set_success_and_capture_errors(success);
    
    GParted_Core already already contains many such calls without using a
    wrapper function:
        $ fgrep '.get_last_child().set_success_and_capture_errors(' GParted_Core.cc | wc -l
        34
    
    FileSystem::set_status() takes a boolean success parameter, where as
    OperationDetail::set_status() takes an OperationDetailStatus (STATUS_*)
    parameter and doesn't implement capturing errors.  So to any avoid
    possible confusion and because it abstracts so little remove
    FileSystem::set_status().
    
    Also update the comment for EXEC_CHECK_STATUS that
    set_success_and_capture_errors() should be called instead of
    set_status().  Missed when patchset for bug 790842 "Report libparted
    messages into operation details at the point at which they occur"
    introduced set_success_and_capture_errors().  Probably should have been
    in commit:
        2ed7feb2f56e18974dcaea14b68de05409847d79
        Add mechanism to capture exception messages into an OperationDetail (#790842)

2024-12-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename method to OperationDetail::get_children()
    
    In English there is no such word as "childs".  Spell the word correctly
    as "children".  Change the method name.

2024-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor 6 DMRaid methods using local variable exit_status
    
    exit_status variable name sounds too much like the integer exit status
    from executing a command, not a boolean success (or failure) variable.
    Rename the variable to success, matching the code in many GParted_Core
    and file system interface class methods.
    
    Avoid creating a temporary string, instead directly pass the composed
    string into adding a new child operation detail.  Save a reference to
    the newly added child operation detail to avoid repeated calls to
    operationdetail.get_last_child().

2025-01-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace bitwise operations on boolean values
    
    Performing bitwise operations on boolean values is considered bad
    practice [1][2].  In C++ conceptually it implies converting booleans to
    integers to apply the bitwise operation and converting back.  Therefore
    replace bitwise OR and AND assignments (|= and &=) used on boolean
    operands.
    
    [1] SEI CERT C Coding Standard, EXP46-C. Do not use a bitwise operator
        with a Boolean-like operand
        https://wiki.sei.cmu.edu/confluence/display/c/EXP46-C.+Do+not+use+a+bitwise+operator+with+a+Boolean-like+operand
    [2] Using bitwise operators for Booleans in C++
        https://stackoverflow.com/questions/24542/using-bitwise-operators-for-booleans-in-c

2025-04-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace FileSystem::exit_status member with local variables
    
    FileSystem::exit_status is also just used as a variable locally within
    multiple methods.  As discussed in the previous commit this is wrong,
    leads to unexpected sharing of data and even bugs.  Therefore remove and
    replace with local variables.

2025-04-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace FileSystem::output and ::error members with local variables
    
    Member variables FileSystem::output and ::error were used to pass
    information between the running command and the *_progress() callbacks.
    Now that these cases have been replaced these member variables are being
    used like local variables in many methods.  They don't represent any
    properties of the FileSystem or derived classes.  In fact the previous
    commit "Restore detection of errors from mounted XFS labelling (!132)"
    shows that bugs are possible when methods accidentally share data
    through member variables being used as local variables.  Therefore
    remove these members and replace with local variables.
    
    Previously removed FileSystem member variables T, N and S for the same
    reason, starting with:
        ef3e1d1cce572a1faf227ac6b1f25d6aa2a75fc0
        Stop using member variables T, N & S in ext2 class (!119)

2025-04-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore detection of errors from mounted XFS labelling (!132)
    
    On a mounted XFS file system use GParted and attempt to label the file
    system to "spaced label".  The operation falsely reports success like
    this:
        Set file system label "spaced label" on /dev/sdd8          (SUCCESS)
        * calibrate /dev/sdd8                                      (SUCCESS)
        * Set file system label to "spaced label" on /dev/sdd8     (SUCCESS)
          * xfs_io -c 'label -s spaced label' /mnt/8               (SUCCESS)
              label [-s label|-c] -- query, set or clear the filesystem label while mounted
    
    xfs_io command reported an error message but GParted claimed the
    operation was successful.  This case was described and handled in the
    commit which added the capability:
        0c13855d5250f5565a8d3f4da943b63d55c13972
        Add labelling of mounted xfs (#163)
    
    What is happening is that:
    1.  During the GParted device scanning xfs::read_label() is using
        Utils::execute_command() to run this:
            # xfs_db -r -c 'label' /dev/sdd8
            label = ""
        and capturing stdout into xfs::output member variable (inherited
        from the FileSystem class).
    2.  When applying the label operation xfs::write_label() is now using
        OperationDetail::execute_command() to run:
            # xfs_io -c 'label -s spaced label' /mnt/8
            label [-s label|-c] -- query, set, or clear the filesystem label while mounted
        and is capturing stdout into OperationDetails.h:cmd_status.output.
        But xfs::write_label() is still checking xfs::output for the command
        output.
    
    Fix this by accessing the correct output variable with the captured
    stdout.  Now GParted correctly detects the error from xfs_io in this
    case.
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2025-04-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore progress bars when parsing FS command output (!132)
    
    Progress bars are no longer being generated for steps which parse output
    from file system specific commands.  Specifically for:
        EXT2/3/4:   Check, Copy, Create, Move, Resize
        NTFS:       Copy, Resize
    
    The callback functions {ext2,ntfs}::*_progress() parse the string
    variables output or error.  These are member variables in the FileSystem
    and derived classes, where FileSystem::execute_command_internal() read
    the command's stdout and sterr streams into.  Now
    execute_command_internal() has moved into the OperationDetail class it
    reads the command's stderr and stderr streams into local variables. but
    the progress callbacks are still parsing the FileSystem member variables
    output or error.  Hence no data to extract the progress information from
    and no progress bars.
    
    Fix this by moving the execute_command_internal() output and error local
    variables into struct CommandStatus and provide getters which the
    progress callbacks use to access said variables.
    
    Note that constructor PipeCapture::PipeCapture(...), called in
    execute_command_internal(), clears these now persistent output and error
    strings before any data is read into them from the command's streams.
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2024-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Transition DMRaid::execute_command() calls to OperationDetail replacements (!132)
    
    DMRaid::execute_command() used Utils::execute_command() and manually
    created operation details for the command and it's stdout and stderr.
    Now OperationDetail::execute_command() exists, does all that and is
    available, use it instead.
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2024-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove FileSystem::execute_command() methods (!132)
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2024-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Transition all FileSystem::execute_command() calls to OperationDetail replacements (!132)
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2025-04-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wrap multiple coordination variables into a single struct (!132)
    
    Move multiple file scope variables used for coordination between
    execute_command_internal() and it's callback helpers into a single
    struct CommandStatus.  Makes it clearer the variables are all used
    together.  Similar to, but simpler than, class CommandStatus in
    Utils.cc.
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2024-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Copy FileSystem::execute_command() methods into OperationDetail class (!132)
    
    Copy the execute_command() methods and associated internal
    implementation methods to the OperationDetail class / module.
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2024-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Copy *Slot typedefs to OperationDetail.h (!132)
    
    Define the *Slot typedefs outside the OperationDetail class declaration
    so that they can be referred to outside the OperationDetail class as:
        StreamSlot
        TimedSlot
    rather than having to use:
        OperationDetail::StreamSlot
        OperationDetail::TimedSlot
    
    (The existing FileSystem *Slot typedefs are defined inside the
    FileSystem class but are also only used within the FileSystem and
    derived classes so don't need to use the FileSystem:: namespace prefix
    when referring to them).
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2024-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move ExecFlags enum and operators to OperationDetail.h (!132)
    
    Fundamentally there are two different types of execute_command() in
    GParted:
    1. Utils::execute_command()
       Mostly used during device scan in order to read file system
       information from the command's stdout or stderr, but sometimes just
       used to execute a command while making a change.  Expected to be fast
       as GParted just waits for the command to complete.
    2. FileSystem::execute_command()
       Used as part of applying an operation when stdout and stderr are
       incrementally captured into operation details as the command runs.
       May be long running.
    
    DMRaid::execute_command() is called when applying an operation and the
    output is saved into the operation details.  It actually calls
    Utils::execute_command() and manually creates the operation details.  It
    really ought to be calling FileSystem::execute_command() but can't
    because that's protected in the FileSystem class.  In order to allow the
    DMRaid module to use the preferred FileSystem::execute_command() move it
    to the OperationDetail class allowing it to be used from anywhere
    operation details are used.
    
    Break the change up into a number of smaller incremental commits.  This
    commit just moves the ExecFlags enumeration and associated operators
    into the OperationDetail header.
    
    Closes !132 - Move FileSystem::execute_command() to OperationDetail
                  class

2025-04-27  Takayuki KUSANO <gnome-l10n@tkusano.jp>

    Update Japanese translation

2025-03-28  Álvaro Burns <ahoradocafezinho@gmail.com>

    Update Brazilian Portuguese translation

2025-03-15  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2025-02-21  Aurimas Černius <aurisc4@gmail.com>

    Update Lithuanian translation

2025-02-14  Sabri Ünal <yakushabb@gmail.com>

    Update Turkish translation

2025-01-30  Curtis Gedak <gedakc@gmail.com>

    Minor update to NEWS for missed dependency update for libparted

2025-01-30  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2025-01-30  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.7.0   ==========

2025-01-30  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2025-01-15  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Update Serbian translation

2024-09-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary else clause braces from commit_to_os()
    
    The braces around the code in the else clause became unnecessary with
    commit [1] which removed all the other code in the else clause.
    
    [1] 8df975c7d1b5d69897f286bfc5574c51cf58c9d5
        Increase minimum required libparted to 2.2 (!22)

2024-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Conditional ENABLE_ONLINE_RESIZE is now always available (!131)
    
    The ability for libparted to online resize partitions was first included
    in libparted 3.2.  Now that is also minimum requirement, unconditionally
    include the code.
    
    Closes !131 - Increase minimum required version of libparted to 3.2

2024-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove obsolete ENABLE_EXPLICIT_FLUSH_WORKAROUND (!131)
    
    The workaround for libparted <= 3.1 to explicitly flush the Linux kernel
    caches to ensure coherency between the caches of the whole disk device
    and the partition devices is obsolete now the minimum requirement is
    libparted 3.2.  Therefore remove the workaround.
    
    Closes !131 - Increase minimum required version of libparted to 3.2

2024-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Conditional HAVE_LIBPARTED_FS_RESIZE is now always available (!131)
    
    The wanted ped_file_system_resize() function is available in the
    parted-fs-resize library with parted 3.1 and later.  Now the minimum
    requirement is libparted 3.2, unconditionally use the function and
    require the library.
    
    Closes !131 - Increase minimum required version of libparted to 3.2

2024-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove obsolete conditional ENABLE_LOOP_DELETE_OLD_PTNS_WORKAROUND (!131)
    
    Now the minimum requirement is for libparted 3.2, workaround for
    libparted 2.0 to 3.0 not informing the kernel to delete old partitions
    when creating a "loop" table is obsolete.  Therefore remove the
    workaround.
    
    Closes !131 - Increase minimum required version of libparted to 3.2

2024-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum required version of libparted to 3.2 (!131)
    
    GNU Parted 3.2 was released 2014-07-28 [1][2].  The oldest supported
    distributions have these versions of GNU Parted (and libparted):
        Distribution       EOL            parted --version
        Debian 11          2026-Aug       3.4
        RHEL 8             2029-Jul       3.2
        SLES 15            2031-Jul [3]   3.2
        Ubuntu 20.04 LTS   2025-Apr       3.3
    
    Even older no longer supported distributions:
        Distribution       EOL            parted --version
        Debian 10          2024-Jun       3.2
        RHEL / CentOS 7    2024-Jun       3.1
        SLES 12 SP5        2024-Oct       3.1
        Ubuntu 18.04 LTS   2023-Apr       3.2
    
    GParted currently has 4 different sets of conditional code depending on
    the version of libparted it is compiled against.  With increasing the
    minimum version of libparted to 3.2, the 2 sets of bug workarounds for
    older versions of libparted can be removed and the 2 sets of enabling
    optional features can always be enabled.
    
    Therefore increase the minimum required version of libparted to 3.2.
    
    [1] GNU Parted 3.2 release announcement
        https://lists.gnu.org/archive/html/info-gnu/2014-07/msg00014.html
    [2] NEWS file from GNU Parted 3.2
        http://git.savannah.gnu.org/cgit/parted.git/tree/NEWS?h=v3.2
            "Noteworthy changes in release 3.2 (2014-07-28) [stable]"
    [3] Product Support Lifecycle Lifecycle Dates by Product, SUSE Linux
        Enterprise Server 15
        https://www.suse.com/lifecycle/#suse-linux-enterprise-server-15
    
    Closes !131 - Increase minimum required version of libparted to 3.2

2024-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Partial white space tidy-up of btrfs::get_filesystems_support()

2024-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove fallback for bcachefs online read FS usage
    
    There is only a fallback for btrfs busy detection, as added by commit
    "Don't run btrfs when not found, during busy detection (#271)".
    
    None of the other mountable file systems which have a custom online read
    FS usage method (btrfs, ext2/3/4 and jfs) have a fallback of using
    GParted's built-in method which queries the Linux kernel.  Therefore
    remove this from bcachefs.  Left behind by commit:
        5e788f0d11fbda252ca8eccc0b13298d3d6929ba
        Add reading of bcachefs usage when mounted (!123)

2024-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Constify Utils::get_failure_status() parameter
    
    The parameter is not modified by the function.

2024-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't run btrfs when not found, while setting mount points (#271)
    
    Repeat the same test as the previous commit.  Have a btrfs file system
    mounted, while the btrfs executable is not in $PATH.  GParted reports
    this to the terminal:
        # gparted
        GParted 1.6.0-git
        configuration --enable-online-resize
        libparted 3.6
        Failed to execute child process "btrfs" (No such file or directory)
    
    The error is because while GParted is discovering the mount points for
    the partition containing the mounted btrfs file system it ends up trying
    to run the missing btrfs executable.  The back trace for this is:
        #0 Utils::execute_command("btrfs filesystem show '/dev/sdb1'", ...)
        #1 btrfs::get_cache_entry(path="/dev/sdb1")
        #2 btrfs::get_mount_device(path="/dev/sdb1")
        #3 GParted_Core::set_mountpoints_helper(partition, path="/dev/sdb1")
        #4 GParted_Core::set_mountpoints(partition)
        #5 GParted_Core::set_device_partitions(device, lp_device, lp_disk)
        #6 GParted_Core::set_device_from_disk(device, device_path="/dev/sdb")
    
    This call chain via GParted_Core::set_mountpoints_helper() is not
    controlled by any of the file system support capabilities.  So instead
    fix this by having the btrfs module remember whether the btrfs
    executable is found and only execute it in btrfs::get_cache_entry() when
    it is found.
    
    Continuing with the above test, open the Partition Information dialog.
    This generates another failed to execute child process btrfs error.  The
    backtrace for this is:
        #0 Utils::execute_command("btrfs filesystem show '/dev/sdb1'", ...)
        #1 btrfs::get_cache_entry(path="/dev/sdb1")
        #2 btrfs::get_get_members(path="/dev/sdb1")
        #3 Dialog_Partition_Info::Display_Info()
        #4 Dialog_Partition_Info::Dialog_Partition_Info()
        #5 Win_GParted::activate_info()
    
    The fix in this commit also covers this test case too.
    
    Closes #271 - GParted stuck forever at Searching /dev/sda partitions
                  when btrfs-progs not installed

2024-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't run btrfs when not found, reading online usage (#271)
    
    Now mount the btrfs file system, still while the btrfs executable is not
    in $PATH.  GParted reports this to the terminal:
        # gparted
        GParted 1.6.0-git
        configuration --enable-online-resize
        libparted 3.6
        Failed to execute child process "btrfs" (No such file or directory)
        Failed to execute child process "btrfs" (No such file or directory)
    
    One of those errors is because in the online (mounted) case the btrfs
    specific method for reading file system usage is always called, even
    when the btrfs executable is not found.  (fs.online_read was always set
    to FS::EXTERNAL).
    
    Fix this by only enabling online (mounted) reading of file system usage
    when the btrfs executable is found.
    
    Closes #271 - GParted hangs while searching /dev/sda partitions when
                  btrfs-progs is not installed

2024-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't run btrfs when not found, during busy detection (#271)
    
    Repeat test 1 from the first commit "Don't hang printing a UTF-8
    exception in a none UTF-8 locale (#271)".  Run GParted with a btrfs file
    system on disk but the btrfs executable not in $PATH.  GParted reports
    this to the terminal:
        # gparted
        GParted 1.6.0-git
        configuration --enable-online-resize
        libparted 3.6
        Failed to execute child process "btrfs" (No such file or directory)
    
    This happens because busy (mounted) status detection for btrfs was
    always set to use the btrfs specific method even when the required btrfs
    executable was not found.  (fs.busy was always set to FS::EXTERNAL).
    
    (Btrfs has a specific busy detection method to handle multi-device file
    systems which can be mounted via any one of the members in the
    multi-device file system, which isn't necessarily the block device
    currently being queried).
    
    Fix this by only using the btrfs specific busy detection method when the
    btrfs executable is found.  As the busy (mounted) state of a file system
    is important in determining which operations can and can't be performed
    use the imperfect fallback of GParted's built-in file system mounted
    detection method which queries /proc/mounts.  Note that this only
    detects when a single device btrfs file system is mounted or when a
    multi-device btrfs file system is mounted by the device currently being
    queried.  It does not detect when a multi-device btrfs file system is
    mounted using a different device to the one currently being queried for
    it's busy status.
    
    Closes #271 - GParted hangs while searching /dev/sda partitions when
                  btrfs-progs is not installed

2024-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert all printed exceptions into the locale's character set (#271)
    
    In order to prevent GParted hanging when it prints any other caught Glib
    exceptions convert those messages into the locale's character set too.
    
    Also one of the exceptions was being printed to standard output.  Change
    that to standard error to match all the others.
    
    Closes #271 - GParted hangs while searching /dev/sda partitions when
                  btrfs-progs is not installed

2024-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't hang printing a UTF-8 exception in a none UTF-8 locale (#271)
    
    A user reported that GParted gets stuck forever in the initial device
    scan [1].  The requirements to reproduce this issue are:
    1. A btrfs file system is found.
    2. The btrfs executable is not found.
    3. Use a locale that is not UTF-8 capable.
    
    Test 1: Run GParted with just requirements 1 and 2 met but not 3.
        # gparted
        GParted 1.6.0-git
        configuration --enable-online-resize
        libparted 3.6
        Failed to execute child process "btrfs" (No such file or directory)
    The GParted device scan completes normally and the main window displays
    the first disk drive.  Get the same results when running:
        # LANG=C.utf8 gparted
    (Note that the actual error message uses Unicode left and right double
    quote marks.  They've been replaced here with ANSI double quote mark in
    order to avoid making this commit message Unicode).
    
    Test 2: Now run GParted with all 3 requirements met.
        # LANG=C gparted
        GParted 1.6.0-git
        configuration --enable-online-resize
        libparted 3.6
    
        ** (gpartedbin:26222): CRITICAL **: 21:56:17.945:
        unhandled exception (type Glib::Error) in signal handler:
        domain: g_convert_error
        code  : 1
        what  : Invalid byte sequence in conversion input
    GParted gets stuck forever in the initial device scan with the status
    bar showing "Searching /dev/sda partitions".
    
    The Unicode exception message is printed using this code:
        [Utils.cc:719]    std::cerr << e.what() << std::endl;
    
    Glib::ustring::operator<<() attempts to translate the Unicode exception
    message into ANSI characters for the C locale.  However the message
    contains Unicode left and right double quote marks so this fails with
    the above unhandled exception and never returns.
    
    Fix by explicitly converting the exception message into the current
    locale's character set.  Any characters which aren't converted are
    simply skipped.
    
    (I think all the Glib::SpawnError exceptions originate from GLib's
    fork_exec() [2].  Before translation from English into other languages,
    the only none ANSI characters they contain are Unicode left and right
    double quote marks).
    
    [1] gparted gets stuck while scanning /dev/sda
        https://gitlab.archlinux.org/archlinux/packaging/packages/gparted/-/issues/1
    [2] glib/glib/gspawn-posix.c fork_exec()
        https://gitlab.gnome.org/GNOME/glib/-/blob/2.82.2/glib/gspawn-posix.c?ref_type=tags#L1656
    
    Closes #271 - GParted hangs while searching /dev/sda partitions when
                  btrfs-progs is not installed

2024-11-07  Yaron Shahrabani <sh.yaron@gmail.com>

    Update Hebrew translation

2024-11-07  Yaron Shahrabani <sh.yaron@gmail.com>

    Update Hebrew translation

2024-10-17  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2024-09-29  Sergej A. <asvmail.as@gmail.com>

    Update Russian translation

2024-09-24  Alan Mortensen <alanmortensen.am@gmail.com>

    Update Danish translation

2024-09-21  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2024-09-17  Daniel Rusek <mail@asciiwolf.com>

    Update Czech translation

2024-09-15  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2024-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Comment the purpose of Device.readonly
    
    To avoid having to keep researching the history of what the setting
    means and why GParted sets it during device probe.  The code fragment in
    question:
        GParted_Core::set_device_from_disk()
        ...
            // Case 4/4: Partitioned drive
            ...
            if (device.highest_busy)
                device.readonly = ! commit_to_os(lp_disk, SETTLE_DEVICE_PROBE_MAX_WAIT_SECONDS);
    
    Originally added by commit:
        286579d5780099b8501fece8250473a1253ccf08
        Every devicescan now tests on beforehand if the kernel is able to reread

2024-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor get_device_and_disk() into if fail return early pattern
    
    Again to follow a code pattern slowly being applied.

2024-08-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused 4th parameter from get_device_and_disk()
    
    The flush parameter is no longer used and always defaults to false,
    therefore remove it.  Instead flush is only set to true when calling
    get_device() directly since commit:
        683dc9d1abd6a388e6f1eda7c7ba8465eb970756
        Only read partition table after not finding a whole disk file system (#771244)

2024-09-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor get_device() into if fail return early pattern
    
    To follow a code pattern slowly being applied.

2024-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent GParted probe starting LVM Volume Groups (#259)
    
    A user reported that it was not possible to deactivate an active LVM
    Physical Volume.  They were using GParted app from GParted Live 1.6.0.
    This behaviour has been reproduced on GParted Live 1.6.0-3 (Debian SID
    as of 2024-04-08) and Fedora Rawhide as of 2024-08-15, both recent
    development branches of their respective distributions.  Was not able to
    replicate this on these latest releases: Debian 12, Fedora 40 and
    Ubuntu 24.04 LTS.
    
    GParted did deactivate the LVM Volume Group containing the Physical
    Volume but device refresh probing triggered a udev rule which
    re-activated the Volume Group.  Summary:
    
    1. GParted read the partition table by calling ped_disk_get().
    2. Libparted opened the whole disk and every partition read-write to
       flush the caches for coherency.  On closing the file handles ...
    3. The kernel generated partition remove and add uevents.
    4. Udev triggered the rule to start the LVM VG.
    
    Details obtained with the help of udevadm monitor, strace and
    journalctl:
        GParted  | set_devices_thread()
        GParted  |   set_device_from_disk()
        GParted  |     get_device()
        GParted  |     get_disk()
        libparted|       ped_disk_new()
        libparted|         openat(AT_FDCWD, "/dev/sdb", O_RDWR) = 7
        libparted|         ioctl(7, BLKFLSBUF)         = 0
        libparted|         openat(AT_FDCWD, "/dev/sdb1", O_RDWR) = 8
        libparted|         ioctl(8, BLKFLSBUF)         = 0
        libparted|         fsync(8)                    = 0
        libparted|         close(8)                    = 0
        KERNEL   | change   /devices/pci0000:00/.../block/sdb/sdb1 (block)
        UDEV     | change   /devices/pci0000:00/.../block/sdb/sdb1 (block)
        libparted|         fsync(7)                    = 0
        libparted|         close(7)                    = 0
        KERNEL   | remove   /devices/pci0000:00/.../block/sdb/sdb1 (block)
        KERNEL   | change   /devices/pci0000:00/.../block/sdb (block)
        KERNEL   | add      /devices/pci0000:00/.../block/sdb/sdb1 (block)
        UDEV     | remove   /devices/pci0000:00/.../block/sdb/sdb1 (block)
        UDEV     | change   /devices/pci0000:00/.../block/sdb (block)
        UDEV     | add      /devices/pci0000:00/.../block/sdb/sdb1 (block)
        SYSLOG   | lvm[62502]: PV /dev/sdb1 online, VG testvg is complete.
        KERNEL   | add      /devices/virtual/bdi/253:0 (block)
        KERNEL   | add      /devices/virtual/block/dm-0 (block)
        KERNEL   | change   /devices/virtual/block/dm-0 (block)
        UDEV     | add      /devices/virtual/bdi/253:0 (block)
        UDEV     | add      /devices/virtual/block/dm-0 (block)
        UDEV     | change   /devices/virtual/block/dm-0 (block)
        SYSLOG   | systemd[1]: Started lvm-activate-testvg.service - /usr/sbin/lvm vgchange -aay --autoactivation event testvg.
        SYSLOG   | lvm[62504]:   1 logical volume(s) in volume group "testvg" now active
        SYSLOG   | systemd[1]: lvm-activate-testvg.service: Deactivated successfully.
    
        # grep 'lvm vgchange -a' /usr/lib/udev/rules.d/*lvm*
        /usr/lib/udev/rules.d/69-dm-lvm.rules:... RUN+="... /usr/sbin/lvm vgchange -aay --autoactivation event $env{LVM_VG_NAME_COMPLETE}"
    
    Evaluation using systemd's Locking Block Device Access [1]. Took a BSD
    file lock on /dev/sdb while GParted was probing the drive.  Used Python
    from another terminal:
        # python
        >>> import fcntl
        >>> f = open('/dev/sdb', 'wb')
        >>> fcntl.flock(f, fcntl.LOCK_EX|fcntl.LOCK_NB)
    Ran GParted.  Released the lock by closing the open file when GParted
    display had updated.
        >>> f.close()
    
    The lock temporarily stopped the Volume Group being activated so GParted
    displayed it as inactive, but as soon as the lock was released the udev
    rule fired and the Volume Group was activated.  This is an even worse
    situation as GParted displayed the Volume Group as inactive but it was
    actually active.  Therefore GParted can't use this method.
    
    This type of issue has been encountered before with bcache devices [2]
    and Linux Software RAID arrays [3] being automatically started by device
    probing.  Fix using the same method of temporarily adding in a blank
    override rule which does nothing.
    
    [1] systemd - Locking Block Device Access
        https://systemd.io/BLOCK_DEVICE_LOCKING/
    [2] 8640f91a4f4350bf9508a810cbb2ae28a9acb9b2
        Prevent GParted probe starting stopped bcache (#183)
    [3] a255abf3432ad106fac9c766f0816ada20be8e42
        Prevent GParted starting stopped Linux Software RAID arrays (#709640)
    
    Closes #259 - Trying to deactivate LVM PV fails

2024-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only explicitly flush devices when using libparted < 3.2 (#259)
    
    During device probing GParted always explicitly calls ped_device_sync()
    to flush the caches for coherency between the whole disk device and the
    partition devices [1].  As the GParted_Core::flush_device() comment
    explains, since v3.1.61-gfb99ba5 [2], libparted flushes the devices
    every time a device is opened [3], so also explicitly doing this in
    GParted is unnecessary.  Therefore stop explicitly flushing the devices
    in GParted, except when using libparted 3.1 and older which doesn't do
    it itself.
    
    The ped_device_open() and ped_device_close() needed for the
    ped_device_sync() is also a trigger of device changes and udev rule
    execution performing LVM Volume Group activation, because libparted
    opens the device read-write [4].  This is another reason to remove it
    when possible.  However even when eliminated it does not solve the issue
    of LVM VG activation because other triggers remain.  Do want this change
    first though so that the sequence of libparted calls isn't changed
    immediately after documenting them and fixing the issue and so that
    there is no doubt that this change doesn't fix the issue.
    
    Removing this extra device flush saves a little bit of time, depending
    on the speed of the drive and number of partitions.  Sample savings on
    my desktop:
        Drive type and partitions       Saving (seconds)
        -----------------------------   ----------------
        fast SSD with 3 partitions      0.05
        slow SSD with 12 partitions     0.27
        HDD with 1 partition            0.05
        VHDD in VM with 1 partition     0.14
        VHDD in VM with 10 partitions   0.58
    
    Also the settle_device() call in flush_device() needs to be kept to wait
    for device changes and udev rule execution whether it is GParted
    explicitly flushing the device or just libparted automatically doing it
    for cache coherency in ped_device_get().  This is because:
    1.  Libparted <= 3.2 opens the whole disk device read-write for
        ped_device_get() [5].  (This was changed with parted
        v3.2.26-g44d5ae0 [6] to open the whole disk device read-only).
    2.  Libparted up to and including the latest 3.6 release still opens all
        partition devices read-write for ped_device_get() [7].
    3.  A whole disk device FAT32 file system looks enough like a partition
        table that both the Linux kernel and libparted think it is
        partitioned:
            # mkfs.fat -F32 /dev/sdb
            mkfs.fat 4.2 (2021-01-31)
            # grep sdb /proc/partitions
               8       16    8388608 sdb
               8       17    8388607 sdb1
            # parted /dev/sdb print
            Model: ATA VBOX HARDDISK (scsi)
            Disk /dev/sdb: 8590MB
            Sector size (logical/physical): 512B/512B
            Partition Table: loop
            Disk Flags:
    
            Number  Start  End        Size       File system  Flags
             1      0s     16777215s  16777216s  fat32
    
    So the ped_device_get() call on a whole disk device FAT32 file system
    still triggers device change and udev rule execution which needs to be
    waited for, as this is exactly the case fixed previously by commit:
        1382e0b828f630a705cecd97c346dfc6267909bf
        Wait for udev change on /dev/DISK when querying whole device FS (!46)
    
    [1] 3bea067596e3e2d6513cda2a66df1b3e4fa432fb
        Flush devices when scanning to prevent reading stale signatures (#723842)
    [2] Revert "linux-commit: do not unnecessarily open partition device nodes"
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=fb99ba5ebd0dc34204fc9f1014131d5d494805bc
    [3] parted libparted/arch/linux.c:_device_open()
        https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1752
            1709 static int
            1710 linux_open (PedDevice* dev)
            1711 {
            1712     return _device_open (dev, RW_MODE);
            1713 }
            1714
            1715 static int
            1716 _device_open (PedDevice* dev, int flags)
            ...
            1752     _flush_cache (dev);
    
    [4] parted libparted/device.c:ped_device_open() v3.6
        https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/device.c?h=v3.6#n226
        parted libparted/arch/linux.c v3.6
        https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6
            ped_device_open(...)
                ped_architecture->dev_ops->open(...) = linux_open(...)
                    _device_open(..., RW_MODE)
                        open(..., O_RDWR)
    
    [5] parted libparted/device.c:ped_device_get() v3.2
        https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/device.c?h=v3.2#n149
        parted libparted/arch/linux.c v3.2
        https://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.2
            ped_device_get(...)
                ped_architecture->dev_ops->_new(...) = linux_new()
                    init_ide(...)
                    init_scsi(...)
                    init_generic(...)
                        ped_device_open(...)
                            ped_architecture->dev_ops->open(...) = linux_open(...)
                                open(..., O_RDWR)
    [6] libparted: Use read only when probing devices on linux (#1245144)
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=44d5ae0115c4ecfe3158748309e9912c5aede92d
    [7] parted libparted/arch/linux.v v3.6
        http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1660
            1660 static void
            1661 _flush_cache (PedDevice* dev)
            ...
            1673     for (i = 1; i < lpn; i++) {
            ...
            1680         if (!_partition_is_mounted_by_path(name)) {
            1681             fd = open (name, WR_MODE, 0);
    
    Closes #259 - Trying to deactivate LVM PV fails

2024-09-13  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2024-09-13  Ekaterine Papava <papava.e@gtu.ge>

    Update Georgian translation

2024-09-12  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2024-09-12  Luming Zh <lumingzh@qq.com>

    Update Chinese (China) translation

2024-09-11  Martin <miles@filmsi.net>

    Update Slovenian translation

2024-09-11  Jürgen Benvenuti <jbenvenuti@gnome.org>

    Update German translation

2024-09-11  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2024-03-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Drop the 2 decimal places when printing values in bytes
    
    When printing a number of bytes using Utils::format_size() it always
    formatted the value with 2 decimal digits and an IEC multiplier.  This
    can be seen in the details of any operation which includes clearing old
    file system signatures.  Fragment of operation details:
        Format /dev/sdb1 as cleared
        + calibrate /dev/sdb1
        + clear old file system signatures in /dev/sdb1
            write 512.00 KiB of zeros at byte offset 0
            write 4.00 KiB of zeros at byte offset 67108864
    >>      write 512.00 B of zeros at byte offset 132537184
            write 4.00 KiB of zeros at byte offset 1072693248
            write 512.00 KiB of zeros at byte offset 133593440
            flush operating system cache of /dev/sdb1
    
    It doesn't make sense to be reporting 100ths of a byte.  So when values
    are below 1 KiB report numbers of bytes without any decimal digits.

2024-03-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Query usage of multi-device bcachefs file systems correctly
    
    Create an uneven used space multi-device bcachefs file system like this,
    where sdb1 is about 1/2 used and sdb2 is almost empty:
        # bcachefs format /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # dd if=/dev/zero bs=1M count=512 of=/mnt/1/zeros.bin
        # bcachefs device add /mnt/1 /dev/sdb2
    
    GParted reports both devices as having the same usage:
        Partition   File System   Mount Point   Size       Used         Unused       Flags
        /dev/sdb1   bcachefs      /mnt/1        1.00 GiB   526.00 MiB   498.00 MiB
        /dev/sdb2   bcachefs      /mnt/1        1.00 GiB   526.00 MiB   498.00 MiB
    
    When in fact the used space is significantly different for each device:
        # bcachefs fs usage /mnt/1 | egrep ' \(device |free:|capacity:'
        (no label) (device 0):          sdb1              rw
          free:                    522190848            3984
          capacity:               1073741824            8192
        (no label) (device 1):          sdb2              rw
          free:                   1061945344            8102
          capacity:               1073741824            8192
    
    This is because bcachefs::set_used_sectors() is always searching for the
    first "free:" and "capacity:" figures.  Fix by reading the figures for
    the correct device.

2024-04-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bcachefs checking (!123)
    
    [Only the options being used by GParted are quoted here from the help
    output.  More options are available.]
        $ bcachefs fsck --help
        bcachefs fsck - filesystem check and repair
        Usage: bcachefs fsck [OPTION]... <device>
    
        Options:
          -y               Assume "yes" to all questions
          -f               Force checking even if filesystem is marked clean
          -v               Be verbose
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bcachefs growing (!123)
    
    Shrinking a bcachefs file system is not supported.
        # truncate -s $((1*1024*1024*1024)) /tmp/disk.img
        # losetup --find --show /tmp/disk.img
        /dev/loop0
        # bcachefs format /dev/loop0
        ...
        # bcachefs device resize /dev/loop0 $((1*1024*1024*1024 - 512))
        Doing offline resize of /dev/loop0
        mounting version 1.4: member_seq
        initializing new filesystem
        going read-write
        initializing freespace
        Shrinking not supported yet
        # echo $?
        1
    
    Growing a bcachefs file system is supported when unmounted.
        # truncate -s $((2*1024*1024*1024)) /tmp/disk.img
        # losetup --set-capacity /dev/loop0
        # bcachefs device resize /dev/loop0
        Doing offline resize of /dev/loop0
        mounting version 1.6: btree_subvolume_children
        recovering from unclean shutdown
        journal read done, replaying entries 1-1
        alloc_read... done
        stripes_read... done
        snapshots_read... done
        going read-write
        journal_replay... done
        resume_logged_ops... done
        delete_dead_inodes... done
        resizing /dev/loop0 to 16384 buckets
        # echo $?
        0
        # bcachefs show-super /dev/loop0 | egrep 'Device:|Size:'
        Device:                                     0
          Size:                                     2.00 GiB
    
    Growing is also supported when mounted.
        # mount /dev/loop0 /mnt/0
        # truncate -s $((3*1024*1024*1024)) /tmp/disk.img
        # losetup --set-capacity /dev/loop0
        # bcachefs device resize /dev/loop0
        Doing online resize of /dev/loop0
        resizing /dev/loop0 to 24576 buckets
        # echo $?
        0
        # bcachefs show-super /dev/loop0 | egrep 'Device:|Size:'
        Device:                                     0
          Size:                                     3.00 GiB
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid erasing the same range multiple times (!123)
    
    When the size of the partition being cleared is an exact multiple of
    MiBs, likely given that GParted aligns partitions to whole MiBs by
    default, then the same range will be zeroed 4 times in a row.  Example
    operation details from clearing a partition look like this:
    
        Format /dev/sdb1 as cleared
        + calibrate /dev/sdb1
            path: /dev/sdb1 (partition)
            start: 2048
            end: 2099199
            size: 2097152 (1.00 GiB)
        + clear old file system signatures in /dev/sdb1
            write 512.00 KiB of zeros at byte offset 0
            write 4.00 KiB of zeros at byte offset 67108864
            write 512.00 B of zeros at byte offset 1072161280
    >>      write 4.00 KiB of zeros at byte offset 1072693248
    >>      write 4.00 KiB of zeros at byte offset 1072693248
    >>      write 4.00 KiB of zeros at byte offset 1072693248
    >>      write 4.00 KiB of zeros at byte offset 1072693248
            write 512.00 KiB of zeros at byte offset 1073217536
        + set partition type on /dev/sdb1
    
    This is because the bcachefs backup super block is located at -1 MiB
    from the end of the device, rounded down by the bcachefs bucket size.
    The bucket size can be any of 128 KiB, 256 KiB, 512 KiB or 1 MiB,
    depending on the size of the bcachefs file system.  So when the
    partition size is an exact multiple of MiBs all 4 possible rounding
    sizes result in the same offset.
    
    Avoid writing the same range of zeros multiple times by skipping a range
    if it is identical to the previous range.
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-03-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Erase Bcachefs backup super block (!123)
    
    GParted doesn't clear all bcachefs file system signatures.
        # truncate -s $((1*1024*1024*1024)) /tmp/disk.img
        # losetup --find --show /tmp/disk.img
        /dev/loop0
        # bcachefs format /tmp/disk.img
        # wipefs /dev/loop0
        DEVICE OFFSET     TYPE     UUID                                 LABEL
        loop0  0x1018     bcachefs 15304edb-6dc4-476c-989e-74eaea6660e8
        loop0  0x3ff00018 bcachefs 15304edb-6dc4-476c-989e-74eaea6660e8
    
    Use GParted to format to cleared /dev/loop0.
        # wipefs /dev/loop0
        DEVICE OFFSET     TYPE     UUID                                 LABEL
        loop0  0x3ff00018 bcachefs 15304edb-6dc4-476c-989e-74eaea6660e8
    
    The backup super block is located at -1 MiB before the end of the
    device, rounded down to the file system's bucket size [1], where the
    bucket size is one of: 128 KiB, 256 KiB, 512 KiB, 1024 KiB [2].
        location = device size - 1 MiB
                 = hex(1*1024*1024*1024 - 1*1024*1024)
                 = 0x3ff00000
    Bcachefs magic is at byte offset 24 (0x18) into the super block [3].
    
    The backup super block was not erased because GParted only writes zeros
    from -512 KiB to the end of the device.  It is necessary to clear old
    signatures before formatting with a new file system to avoid confusion
    from detection of multiple incompatible signatures [4][5].  Fix this by
    writing zeros over all possible locations of the bcachefs backup super
    block.
    
    [1] bcachefs-tools v1.6.4: c_src/libbcachefs.c:bch2_format()
        https://evilpiepirate.org/git/bcachefs-tools.git/tree/c_src/libbcachefs.c?h=v1.6.4#n313
        [This code locates the backup super block at device size - 1 MiB
        rounded down to the bucket size.]
        321     struct bch_sb_layout *l = &sb.sb->layout;
        322     u64 backup_sb = size_sectors - (1 << l->sb_max_size_bits);
        323
        324     backup_sb = rounddown(backup_sb, i->bucket_size >> 9);
    [2] bcachefs-tools v1.6.4: c_src/libbcachefs.c:bch2_pick_bucket_size()
        https://evilpiepirate.org/git/bcachefs-tools.git/tree/c_src/libbcachefs.c?h=v1.6.4#n85
         85      /* Want a bucket size of at least 128k, if possible: */
         86      bucket_size = max(bucket_size, 128ULL << 10);
        ...
         94      /* max bucket size 1 mb */
         95      bucket_size = min(bucket_size * scale, 1ULL << 20);
    [3] bcachefs-tools v1.6.4: libcachefs/bcachefs_format.h:struct bch_sb
        https://evilpiepirate.org/git/bcachefs-tools.git/tree/libbcachefs/bcachefs_format.h?h=v1.6.4#n907
    [4] 743968ef68085f6043e8fd569384c0747c8fc9e2
        Add clearing of SWRaid metadata 0.90 and 1.0 super blocks (#756829)
    [5] 3c75f3f5b103bc158b0f70ea63459aa362b0bab8
        Use wipefs to clear old signatures before creating new file systems (#688882)
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-03-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bcachefs label and UUID reading (!123)
    
    Add reading of the bcachefs file system label, not the per device label,
    and the external UUID.  These match what blkid reports.
    
    Example without a label:
        # bcachefs format /dev/sdb1
        # bcachefs show-super /dev/sdb1 | egrep -i 'Label:|UUID:|Device:'
        External UUID:                              3316bc9a-d129-42b6-a80e-9649874bca73
        Internal UUID:                              656eebe5-10a9-4f12-94c8-aab2fdc54732
        Label:
        Device:                                     0
          Label:                                    (none)
          UUID:                                     cd436a8d-82eb-4993-a317-b39ea0d6bd2e
        # blkid /dev/sdb1
        /dev/sdb1: UUID="3316bc9a-d129-42b6-a80e-9649874bca73" BLOCK_SIZE="512" UUID_SUB="cd436a8d-82eb-4993-a317-b39ea0d6bd2e" TYPE="bcachefs" PARTUUID="7962e584-34c9-4088-8a00-a651af517089"
    
    Example with a label:
        # bcachefs format --force -L 'test label' /dev/sdb1
        # bcachefs show-super /dev/sdb1 | egrep -i 'Label:|UUID:|Device:'
        External UUID:                              3d7bdabe-2616-4545-affc-1aba0f8fb4a7
        Internal UUID:                              9cc95d3e-7991-4f78-9dd0-850cb9749e34
        Label:                                      test label
        Device:                                     0
          Label:                                    (none)
          UUID:                                     784d1bd0-5769-4fbb-ad32-07894d381bba
        # blkid /dev/sdb1
        /dev/sdb1: UUID="3d7bdabe-2616-4545-affc-1aba0f8fb4a7" LABEL="test label" BLOCK_SIZE="512" UUID_SUB="784d1bd0-5769-4fbb-ad32-07894d381bba" TYPE="bcachefs" PARTUUID="7962e584-34c9-4088-8a00-a651af517089"
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-03-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum bcachefs size to 32 MiB (!123)
    
    For bcachefs file systems 19 MiB and smaller, the available space is
    reported as a very large value.  The calculation went negative in a
    64-bit signed value but then was interpreted as an unsiged value.
    Writing any significant amount of data to the file system hangs.
        # truncate -s $((19*1024*1024)) /tmp/test.img
        # losetup --find --show /tmp/test.img
        /dev/loop0
        # bcachefs format /dev/loop0
        # mkdir /mnt/0
        # mount /dev/loop0 /mnt/0
        # strace -e statfs df -k /mnt/0
        statfs("/mnt/0", {f_type=0xca451a4e, f_bsize=4096, f_blocks=2305843009213693856,
            f_bfree=2305843009213693600, f_bavail=35474507834056483, f_files=18446744073709529090,
            f_ffree=18446744073709529088, f_fsid={val=[0xddb6645d, 0x8560584]}, f_namelen=512,
            f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
        Filesystem               1K-blocks  Used          Available Use% Mounted on
        /dev/loop0     9223372036854775424  1024 141898031336225932   1% /mnt/0
    
    For a 20 MiB bcachefs the available space is 0 so the file system
    overhead is 100%.
        # umount /mnt/0
        # truncate -s $((20*1024*1024)) /tmp/disk.img
        # losetup --set-capacity /dev/loop0
        # bcachefs format --force /dev/loop0
        # mount /dev/loop0 /mnt/0
        # strace -e statfs df -k /mnt/0
        statfs("/mnt/0", {f_type=0xca451a4e, f_bsize=512, f_blocks=1280, f_bfree=0, f_bavail=0,
            f_files=2, f_ffree=0, f_fsid={val=[0x6b3e4926, 0x33f99a32]}, f_namelen=512, f_frsize=512,
            f_flags=ST_VALID|ST_RELATIME}) = 0
        Filesystem     1K-blocks  Used Available Use% Mounted on
        /dev/loop0           640   640         0 100% /mnt/0
    
    For a 32 MiB bcachefs the file system overhead is a more reasonable 9%
    so use this as the minimum bcachefs file system size.
        ...
        # truncate -s $((32*1024*1024)) /tmp/disk.img
        ...
        # strace -e statfs df -k /mnt/0
        statfs("/mnt/0", {f_type=0xca451a4e, f_bsize=512, f_blocks=24832, f_bfree=22784,
            f_bavail=22433, f_files=182274, f_ffree=182272, f_fsid={val=[0xfdddedd3, 0xe90be3cb]},
            f_namelen=512, f_frsize=512, f_flags=ST_VALID|ST_RELATIME}) = 0
        Filesystem     1K-blocks  Used Available Use% Mounted on
        /dev/loop0         12416  1024     11217   9% /mnt/0
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-03-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add reading of bcachefs usage when mounted (!123)
    
    Currently bcachefs-tools only provides a method to report the file
    system usage while it is mounted.  We won't make GParted mount a
    bcachefs to read it's usage as we want to keep GParted's scanning as a
    read-only activity.  Therefore GParted can't report the usage of an
    unmounted bcachefs.
    
        # bcachefs format /dev/sdb1
        # bcachefs fs usage /dev/sdb1
        error opening /dev/sdb1: not a bcachefs filesystem
        # echo $?
        1
        # bcachefs fs usage --help
        bcachefs fs usage - display detailed filesystem usage
        Usage: bcachefs fs usage [OPTION]... <mountpoint>
        ...
        # mount /dev/sdb1 /mnt/1
        # bcachefs fs usage /mnt/1
        Filesystem: a61a8302-9a79-4c24-a9e6-486e7fcc78f5
        Size:                      987842560
        Used:                       12713984
        Online reserved:                   0
    
        Data type       Required/total  Durability    Devices
        btree:          1/1             1             [sdb1]               1048576
    
        (no label) (device 0):          sdb1              rw
                                        data         buckets    fragmented
          free:                   1061027840            8095
          sb:                        3149824              25        126976
          journal:                   8388608              64
          btree:                     1048576               8
          user:                            0               0
          cached:                          0               0
          parity:                          0               0
          stripe:                          0               0
          need_gc_gens:                    0               0
          need_discard:                    0               0
          capacity:               1073741824            8192
        # echo $?
        0
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bcachefs creation (!123)
    
    Set the minimum file system size to 16 MiB as creating a bcachefs that
    size succeeds:
        $ truncate -s $((16*1024*1024)) /tmp/disk.img
        $ bcachefs format /tmp/disk.img
        ...
        initializing new filesystem
        going read-write
        initializing freespace
        $ echo $?
        0
    
    Where as creating a smaller file system fails for most sizes below that:
        $ rm /tmp/disk.img
        $ truncate -s $((15*1024*1024)) /tmp/disk.img
        $ bcachefs format /tmp/disk.img
        ...
        mounting version 1.6: btree_subvolume_children
        initializing new filesystem
        going read-write
        bch2_trans_mark_dev_sb(): error ENOSPC_disk_reservation
        bch2_fs_initialize(): error marking superblocks ENOSPC_disk_reservation
        bch2_fs_initialize(): error ENOSPC_disk_reservation
        bch2_fs_start(): error starting filesystem ENOSPC_disk_reservation
        error opening /tmp/disk.img: ENOSPC_disk_reservation
        $ echo $?
        1
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-02-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bcachefs detection (!123)
    
    Uses blkid from util-linux >= 2.39 [1] for detection of bcachefs file
    systems.
    
    Use util-linux's FS images when testing GParted detection.
        # wget https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/plain/tests/ts/blkid/images-fs/bcachefs.img.xz
        # zxcat bcachefs.img.xz > /dev/sdb1
        # wget https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/plain/tests/ts/blkid/images-fs/bcachefs-2.img.xz
        # zxcat bcachefs-2.img.xz > /dev/sdb2
        # blkid /dev/sdb1 /dev/sdb2
        /dev/sdb1: UUID="46bd306f-80ad-4cd0-af4f-147e7d85f393" LABEL="Label" BLOCK_SIZE="4096" UUID_SUB="72a60ede-4cb6-4374-aa70-cb38a50af5ef" TYPE="bcachefs" PARTUUID="bd47302a-b33b-47a5-83a1-ba89f52f2a45"
        /dev/sdb2: UUID="4fa11b1e-75e6-4210-9167-34e1769c0fe1" LABEL="Label" BLOCK_SIZE="512" UUID_SUB="525fa857-174a-4d3f-be33-6fe60441de7c" LABEL_SUB="Device Label" TYPE="bcachefs" PARTUUID="6a46a084-5d3b-408a-bba7-351daaea1c66"
    
    [1] Util-linux 2.39 Release Notes
        https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.39/v2.39-ReleaseNotes
        "blkid(8) and libblkid:
    
           * supports bcachefs
        "
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move ZFS to a darker shade of Orange (!123)
    
    Bcachefs [1] has many of the same capabilities as Btrfs [2] and ZFS [3]:
    COW (Copy-on-Write), multi-device, multi-volume, snapshotting and many
    more.  Therefore when adding bcachefs use the same range of Orange
    colours already used by Btrfs and ZFS [4].  As bcachefs is a native
    Linux file system and ZFS is not, move ZFS to a darker shade of Orange
    to allow bcachefs to be added in the middle:
        Btrfs    - Orange Medium (#E58749)
        bcachefs - Orange Dark   (#C26825)
        ZFS      - Orange Shadow (#984F18)
    
    [1] bcachefs
        https://bcachefs.org/
    [2] Welcome to BTRFS documentation! > Introduction
        https://btrfs.readthedocs.io/en/latest/Introduction.html
    [3] ZFS
        https://en.wikipedia.org/wiki/ZFS
    [4] 8a4f9ad205378f2738a2bde9fab42bf604856ef4
        Adjust shades of aquamarine, cyan and orange
    
    Closes !123 - Add support for bcachefs, single device file systems only

2024-08-28  Vasil Pupkin <3abac@3a.by>

    Update Belarusian translation

2024-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove superfluous comment from DMRaid::lookup_dmraid_members()
    
    Utils::trim_trailing_new_line() name is self-explanatory and doesn't
    require a comment.  The comment became superfluous with commit:
    
        1fbc8988ff4311554fb31f8bc490434d8b6635db
        Extract repeated code into trim_trailing_new_line() (!105)

2024-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restrict query to udev device properties in DMRaid::get_udev_dm_name()
    
    Restricting the udev query from all types of device data to only
    properties slightly simplifies the output from udevadm info which has to
    be parsed.  From this:
        $ udevadm info --query=all --name=/dev/dm-0 | grep DM_NAME
        E: DM_NAME=isw_cbaccqjiij_myarray
    
    to:
        $ udevadm info --query=property --name=/dev/dm-0 | grep DM_NAME
        DM_NAME=isw_cbaccqjiij_myarray

2024-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify DMRaid::get_udev_dm_name()
    
    Use if false return early pattern for the udevadm command found check.
    Don't bother to check the exit status from running the udevadm command
    or whether the output string contains anything before trying to parse it
    for the serial number using Utils::regexp_label().  If the output string
    is empty because either the udevadm command failed or the device has no
    serial number then Utils::regexp_label() will assign the empty string to
    serial_number; exactly what is wanted for these failure cases.  This
    makes the code simpler and easier to understand and still produces the
    desired results in the failure cases.

2024-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Trim device model string returned from libparted
    
    The device model displayed in GParted has a leading space character when
    the kernel device driver vendor attribute is blank.
        # lsblk -o KNAME,VENDOR,MODEL,SERIAL,TYPE,TRAN -d /dev/sde /dev/sdh
        KNAME VENDOR   MODEL            SERIAL           TYPE TRAN
        sde   SanDisk  U3 Cruzer Micro  00001853E473AABA disk usb
        sdh            Patriot Memory   07082AA3E0944E31 disk usb
              ^^^^^^^^
    
        # cd /sys/block/sde/device
        # cat vendor
        SanDisk
        # cat model
        U3 Cruzer Micro
    
        # cd /sys/block/sdh/device
        # cat vendor
    >>
        # cat model
        Patriot Memory
    
        # ls -l /dev/sde /dev/sdh
        brw-rw----. 1 root disk 8,  64 Aug  9 18:26 /dev/sde
        brw-rw----. 1 root disk 8, 112 Aug  9 18:26 /dev/sdh
    
    Libparted treats USB keys as SCSI devices because they use the SCSI
    major device number.  This means the libparted device model string is
    constructed from the kernel device driver vendor and model strings read
    from /sys, stripped and separated by a space character [1].  Hence the
    leading space in the libparted model string when vendor is blank.
        # parted /dev/sde print | head -1
        Model: SanDisk U3 Cruzer Micro (scsi)
        # parted /dev/sdh print | head -1
        Model:  Patriot Memory (scsi)
               ^
    
    Trim space characters from the libparted model string to remove the
    leading space displayed in GParted.
    
    [1] parted/libparted/arch/linux.c:init_scsi()
        http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.6#n1189
            if (scsi_get_product_info (dev, &vendor, &product)) {
                    sprintf (dev->model, "%.8s %.16s", vendor, product);

2024-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update README to reflect hdparm being replaced with udevadm (#263)
    
    Plus shorten a 73 character line to 72.
    
    Closes #263 - Serial number for my USB key showing binary data

2024-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using udevadm info to query drive serial numbers (#263)
    
    A user reported that GParted was displaying binary data for the serial
    number of their USB key.  This was because hdparm -I was reporting
    binary data for the serial number.  It looked like this (except the
    question marks were binary non-printable bytes).
        $ LANG=C sudo hdparm -I /dev/sdh
    
        /dev/sdh:
    
        ATA device, with non-removable media
                Model Number:       ?|??t??L??|??
                Serial Number:      ?@>??8
                                          u
                Firmware Revision:  u???
        Standards:
                Likely used: 1
        ...
    
    Back in 2015 when reporting of drive serial numbers was being added
    [1][2], using hdparm -I was the best option because it reported the
    serial number of all hard drives including those in virtual machines,
    worked the same everywhere and was available by default in most
    distributions, but didn't work for USB keys.  Where as lsblk -o SERIAL
    was a new option not available yet on some distributions and didn't
    report the serial number of drives in virtual machines.
    
    Now hdparm -I capabilities are still the same; only working for hard
    drives, including SSDs, but not USB keys.  Except for the above case
    hdparm has always found to not report serial numbers for USB keys, like
    this:
        # hdparm -I /dev/sde
    
        /dev/sde:
        SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 15 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 00 00 00
    
        ATA device, with non-removable media
        Standards:
                Likely used: 1
        ....
    
    Now the lsblk -o SERIAL option is available on all distributions and
    reports the serial numbers of all drives including for virtual machine
    disks and USB keys.
    
    From an older but still supported Ubuntu 20.04 LTS virtual machine:
        # lsblk -o KNAME,VENDOR,MODEL,SERIAL,TYPE,TRAN -d
        KNAME VENDOR   MODEL            SERIAL              TYPE TRAN
        sda   ATA      VBOX HARDDISK    VB13d4e080-b35e62d3 disk sata
        sdb   ATA      VBOX HARDDISK    VB221202cf-092e5857 disk sata
        sdc   ATA      VBOX HARDDISK    VB04fefadd-5a185f96 disk sata
        sr0   VBOX     CD-ROM           VB2-01700376        rom  ata
    
    From a physical machine running older but still supported Rocky Linux 8
    with 2 SSDs, 2 HDDs, and 6 USB keys:
        # lsblk -o KNAME,VENDOR,MODEL,SERIAL,TYPE,TRAN -d
        KNAME VENDOR   MODEL            SERIAL                   TYPE TRAN
        sda   ATA      Samsung SSD 860  S3Z9NY0M620872V          disk sata
        sdb   ATA      SAMSUNG SSD UM41 DCF4300940SE940B4507     disk sata
        sdc   ATA      WDC WD10JFCX-68N WD-WXE1EB6C3MHY          disk sata
        sdd   ATA      MM0500EBKAE      9XF132MW                 disk sata
        sde   SanDisk  U3 Cruzer Micro  00001853E473AABA         disk usb
        sdf   Kingston DataTraveler 3.0 408D5C1658F7E31079051DB9 disk usb
        sdg   Kingston DataTraveler 2.0 1C6F654FF40FBE50D9341059 disk usb
        sdh            Patriot Memory   07082AA3E0944E31         disk usb
        sdi   Corsair  Slider 3.0       12240400400016361397     disk usb
        sdj   SMI      USB DISK         SMI_USB_DISK-0:0         disk usb
        sr0   ASUS     DRW-24B3LT       B5D0CL213444             rom  sata
        sr1   SanDisk  U3 Cruzer Micro  00001853E473AABA         rom  usb
    
    lsblk gets it's information from udev.  lsblk reports the SERIAL column
    from the udev device property ID_SERIAL_SHORT, except when that is blank
    it uses the ID_SERIAL property instead [3].  Note that ID_SERIAL is
    composed from vendor and model information [4].
    
    USB key with a serial number:
        # udevadm info --query=property --name=/dev/sde | grep SERIAL
        ID_SERIAL=SanDisk_U3_Cruzer_Micro_00001853E473AABA-0:0
        ID_SERIAL_SHORT=00001853E473AABA
        # lsblk -o KNAME,VENDOR,MODEL,SERIAL,TYPE,TRAN -d /dev/sde
        KNAME VENDOR   MODEL            SERIAL           TYPE TRAN
        sde   SanDisk  U3 Cruzer Micro  00001853E473AABA disk usb
    
    USB key without a serial number:
        # udevadm info --query=property --name=/dev/sdj | grep SERIAL
        ID_SERIAL=SMI_USB_DISK-0:0
        # lsblk -o KNAME,VENDOR,MODEL,SERIAL,TYPE,TRAN -d /dev/sdj
        KNAME VENDOR   MODEL            SERIAL           TYPE TRAN
        sdj   SMI      USB DISK         SMI_USB_DISK-0:0 disk usb
    
    To only get the device serial number, or blank when not available, query
    the udev ID_SERIAL_SHORT property directly using udevadm info rather
    than using lsblk -o SERIAL.  Previously GParted displayed "none" if
    hdparm -I successfully found nothing, including for USB keys, and left
    the serial number field blank on failure.  Now the field will be blank
    in both cases, no serial number and failure to query it.
    
    [1] 4b72ecd44eba71b055f939fa5eff4572bb480ad9
        Display device serial numbers (#751251)
    [2] Bug 751251 - Show serial number in device information
        https://bugzilla.gnome.org/show_bug.cgi?id=751251
    [3] misc-utils/lsblk-properties.c:get_properties_by_udev()
        https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/tree/misc-utils/lsblk-properties.c?h=v2.40.2#n121
    [4] what is the difference between ID_SERIAL and ID_SERIAL_SHORT udev
        attributes for a USB descriptor
        https://stackoverflow.com/questions/45940014/what-is-the-difference-between-id-serial-and-id-serial-short-udev-attributes-for
            "The ID_SERIAL_SHORT value comes from the iSerial string (if
            present) in the USB device descriptor.  The ID_SERIAL value is
            constructed in software and made up from various strings (vendor
            or manufacturer, model or product, and serial number if present)
            separated with _.
            "
    
    Closes #263 - Serial number for my USB key showing binary data

2024-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prefix ext2 member variables with m_ and initialise all POD members
    
    To make it clear they are all member variables.  Add missing
    m_fs_block_size POD (Plain Old Data) member to the constructor
    initialisation list so that it's never uninitialised.  And stop
    unnecessarily assigning constant false to m_force_auto_64bit in
    get_filesystem_support() because it is already initialised to false by
    the constructor.

2024-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename fat16 member variable to m_specific_fstype
    
    To make it clear it is a member variable and continue the theme that
    variables of type FSType have fstype in their name [1][2].
    
    [1] 58fb230fb00290678b17bfe039826fd8dbfb6387
        Also rename FS.filesystem member to fstype (!52)
    [2] b0f92be638ea3ecb43dda678ed58cb379d2259b5
        Rename Partition.filesystem member to fstype (!52)
    
    To make it clear m_old_mkudffs is a member variable.

2024-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused member variables from fat16 class
    
    Left behind by commit:
        a9015111b94e7c50a92a81d5364ffbbd165de97a
        Raise minimum supported dosfstools to 3.0.18 (!57)

2024-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prefix xfs member variables with m_ and initialise POD member
    
    To make it clear they are xfs member variables.  Also add a default
    constructor with an initialisation list so POD (Plain Old Data) member
    variable m_src_used is never left uninitialised, as it was previously
    only assigned in xfs::copy().  m_dest_mount_point is a Glib::ustring
    object which is default constructed to a zero length string so doesn't
    need adding to the xfs default constructor initialisation list.
    
    * C++ FAQ / Should my constructors use "initialization lists" or
      "assignment"?
      https://isocpp.org/wiki/faq/ctors#init-lists
          "Initialization lists.  In fact, constructors should initialize as
          a rule all member objects in the initialization list."

2024-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename udf member variable to m_old_mkudffs
    
    To make it clear m_old_mkudffs is a member variable.  Also stop
    unnecessarily assigning constant false to m_old_mkudffs in
    get_filesystem_support() because it is already initialised to false by
    the default constructor.

2024-04-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space tidy-up of Utils::get_filesystem_maxlength()
    
    Use smart tab alignment; indent with tabs and align with spaces.  Also
    remove entries for lvm2 pv and minix which don't support labels, adding
    a comment as to why.

2024-04-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use Glib::build_path() to simplify remove_non_empty_lvm2_pv_dialog()
    
    Simplify code in Win_GParted::remove_non_empty_lvm2_pv_dialog() by
    replacing open coded concatenation of a vector of strings using a new
    line separator with a call to Glib::build_path().

2024-04-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop assigning a zero length string when constructing them
    
    Most of the code doesn't assign a zero length string when constructing a
    string object.  However there were a few places where it did.  This is
    unnecessary because Glib::ustring [1] and std::string [2] objects are
    constructed as the the empty string by default.
    
    [1] Glib::ustring::ustring()
        https://developer-old.gnome.org/glibmm/stable/classGlib_1_1ustring.html#a71802782f4c2c408ef7ac69c6564b370
            "Glib::ustring::ustring()
            Default constructor, which creates an empty string.
            "
    [2] std::string::string
        https://cplusplus.com/reference/string/string/string/
            "(1) empty string constructor (default constructor)
            Constructs an empty string, with a length of zero characters.
            "

2024-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid using tune.exfat on a mounted exFAT file system
    
    Using GParted to display a mounted exFAT file system results in this
    partition warning:
        exfatprogs version : 1.2.4
    
        open failed : /dev/sdb1, Device or resource busy
    
    This is because tune.exfat fails when attempting to query a mounted file
    system.
    
    When unmounted tune.exfat works:
        # mkfs.exfat -L test-label /dev/sdb1
        # tune.exfat -l /dev/sdb1
        exfatprogs version : 1.2.4
        label: test-label
        # tune.exfat -i /dev/sdb1
        exfatprogs version : 1.2.4
        volume serial : 0xefaf7e93
    
    But when mounted tune.exfat fails:
        # mount /dev/sdb1 /mnt/1
        # tune.exfat -l /dev/sdb1
        exfatprogs version : 1.2.4
        open failed : /dev/sdb1, Device or resource busy
        # echo $?
        255
        # tune.exfat -i /dev/sdb1
        exfatprogs version : 1.2.4
        open failed : /dev/sdb1, Device or resource busy
    
    Where as blkid succeeds:
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="test-label" UUID="EFAF-7E93" BLOCK_SIZE="512" TYPE="exfat" PARTUUID="11a7a9eb-680b-4c90-982a-73f671e67e4f"
    
    This failure case must have been missed when exFAT support was first
    added [1][2] because re-testing it now back on Fedora 33 does show the
    error.  Anyway fix this by just not attempting to read the file system
    label or serial number in the file system specific methods while its
    mounted.  GParted will fall back to reading the label from the blkid
    populated FS_Info cache.  See
    GParted_Core::set_partition_label_and_uuid() for details.  The serial
    number is already read from the cache first, falling back to the file
    system specific method second.
    
    [1] bd386f445db0df88025a70063affc0473a1e701c
        Add exFAT support (!30)
    [2] Add exFAT support
        https://gitlab.gnome.org/GNOME/gparted/-/merge_requests/30

2024-08-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also support reading exFAT usage from exfatprogs <= 1.2.2 (#261)
    
    Exfatprogs 1.2.2 and earlier are included in a number of the latest
    distributions.  Therefore support reading exFAT usage from the earlier
    dump.exfat style output.
    
        Distribution                       exfatprogs
        Alpine 3.20                        1.2.2
        Debian 12                          1.2.0
        RHEL / Rocky Linux / AlmaLinux 9   1.2.2
        Ubuntu 24.04 LTS                   1.2.2
    
    On Debian 12, example dump.exfat output:
        # dump.exfat /dev/sdb1 | egrep 'exfatprogs version|Volume Length\(sectors\):|Sector|Free Clusters:'
        exfatprogs version : 1.2.0
        Volume Length(sectors):                 524288
        Sector Size Bits:                       9
        Sector per Cluster bits:                3
        Free Clusters:                          65019
    
    Make this a separate commit so that it can be easily reverted in future
    when this is no longer required.  It also results in simpler code as the
    old shift bits style figures are converted into new direct multiplier
    style figures.  Therefore the final if statement checking all the
    figures are set, computing and assigning partition usage remains simple
    and unchanged.
    
    Closes #261 - Unable to read the contents of exfat file system with
                  exfatprogs >= 1.2.3

2024-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Read exFAT file system usage only from exfatprogs >= 1.2.3 (#261)
    
    exFAT file system usage is no longer readable when exfatprogs 1.2.3,
    released 2024-05-23 [1], and later is installed.  This is because the
    output from dump.exfat changed as a result of commit [2].
    
    On Fedora 39 with exfatprogs 1.2.3 installed and exfatprogs 1.2.2
    compiled locally from git; old dump.exfat output:
        # ~fedora/programming/c/exfatprogs/dump/dump.exfat /dev/sdb1 | egrep 'exfatprogs version|Volume Length\(sectors\):|Sector|Free Clusters:'
        exfatprogs version : 1.2.2
        Volume Length(sectors):                 524288
    >>  Sector Size Bits:                       9
    >>  Sector per Cluster bits:                3
        Free Clusters:                          65024
    
    New dump.exfat output:
        # dump.exfat /dev/sdb1 | egrep 'exfatprogs version|Volume Length\(sectors\):|Sector|Free Clusters:'
        exfatprogs version : 1.2.3
        Volume Length(sectors):                 524288
    >>  Bytes per Sector:                       512
    >>  Sectors per Cluster:                    8
        Free Clusters:                          65024
    
    Change the code to read exFAT usage only from dump.exfat 1.2.3 style
    output.  Don't parse older style output for now as that makes the code
    simpler.
    
    [1] exfatprogs-1.2.3 version released
        https://github.com/exfatprogs/exfatprogs/releases/tag/1.2.3
    [2] dump: Sector and Cluster units
        https://github.com/exfatprogs/exfatprogs/commit/41863cb0f5b9fee0856ba4f948bc40dc4527b965
    
    Closes #261 - Unable to read the contents of exfat file system with
                  exfatprogs >= 1.2.3

2024-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update README for CentOS EOL and dnf transition
    
    As CentOS has been discontinued remove references to it from the README.
    Also update package manager command from yum to dnf now RHEL 8 is the
    earliest supported release.

2024-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace CentOS 7 with Rocky Linux 8 in the CI jobs (!124)
    
    CentOS reached its end of life on 30 June 2024 and has been discontinued
    [1][2].  Instead switch to Rocky Linux 8 which is an open-source rebuild
    of RHEL 8 [3].
    
    [1] What to know about CentOS Linux EOL
        https://www.redhat.com/en/topics/linux/centos-linux-eol
    [2] CentOS Linux is going End of Life, What does that mean for me?
        https://www.redhat.com/en/blog/centos-linux-going-end-life-what-does-mean-me
    [3] Rocky Linux
        https://rockylinux.org/
    
    Closes !124 - Update CI jobs for Ubuntu 24.04 LTS and use Rocky Linux 8

2024-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix .policy file translation in Ubuntu CI docker image (!124)
    
    Now that the official Ubuntu latest docker image has updated to Ubuntu
    24.04 LTS [1] the build CI job fails like this:
        $ make -j $nproc
        ...
        /usr/bin/msgfmt --desktop --template gparted.desktop.in -d ./po -o gparted.desktop
        /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
        /usr/bin/msgfmt: cannot locate ITS rules for org.gnome.gparted.policy.in
        make[2]: *** [Makefile:1060: org.gnome.gparted.policy] Error 1
    
    The needed fix is already documented in the README file [2].  Install
    the required package into the Ubuntu CI docker images to fix this.
    
    [1] Ubuntu Docker official image
        https://hub.docker.com/_/ubuntu/
            "Supported tags and respective Dockerfile links
            ...
            24.04, ..., latest, ...
            "
    [2] 16c2533af090744683cccbfc0987000975f6b52f
        Document future Debian/Ubuntu build time dependency in README (!121)
    
    Closes !124 - Update CI jobs for Ubuntu 24.04 LTS and use Rocky Linux 8

2024-07-26  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2024-06-15  Scrambled 777 <weblate.scrambled777@simplelogin.com>

    Add Hindi translation

2024-03-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise NBDs (Network Block Devices) (#247)
    
    Network Block Devices are not displayed in GParted as partitionable
    devices.  They do appear in /proc/partitions, are reported by
    fdisk -l [1] and by ped_device_probe_all() from libparted.  Therefore
    include them.
    
    Create NBD device for testing:
        # truncate -s 1G /tmp/disk-1G.img
        # nbd-server -C /dev/null 9000 /tmp/disk-1G.img
        # nbd-client localhost 9000 /dev/nbd0
    
    After creating a couple of partitions for testing, the contents of
    /proc/partitions looks like this:
        # egrep 'name|nbd' /proc/partitions
        major minor  #blocks  name
          43        0    1048576 nbd0
          43        1     262144 nbd0p1
          43        2     785408 nbd0p2
    
    Listing all disks using fdisk:
        # fdisk -l
        ...
    
        Disk /dev/nbd0: 1 GiB, 1073741824 bytes, 2097152 sectors
        Units: sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disklabel type: dos
        Disk identifier: 0x081b1cd1
    
        Device      Boot  Start     End Sectors  Size Id Type
        /dev/nbd0p1        2048  526335  524288  256M 83 Linux
        /dev/nbd0p2      526336 2097151 1570816  767M 83 Linux
    
    Temporarily apply this patch to GParted so that it ignores the devices it
    currently selects from /proc/partitions to use what get_device_probe_all()
    reports.  GParted shows NBDs.
        $ git diff --unified=1
        diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
        index 1629f94f..abea7a0b 100644
        --- a/src/GParted_Core.cc
        +++ b/src/GParted_Core.cc
        @@ -172,3 +172,3 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
                //try to find all available devices if devices exist in /proc/partitions
        -       std::vector<Glib::ustring> temp_devices = Proc_Partitions_Info::get_device_paths();
        +       std::vector<Glib::ustring> temp_devices;
                if ( ! temp_devices .empty() )
    
    Tidy-up NBD device:
        # nbd-client -d /dev/ndb0
        # killall nbd-server
        # rm /tmp/disk-1G.img
    
    [1] man fdisk
        "-l, --list
            List the partition tables for the specified devices and then
            exit.  If no devices are given, the devices mentioned in
            /proc/partitions (if this file exists) are used.
        "
    
    Closes #247 - GParted does not list NBD (Network Block Device) devices
                  in the GUI

2024-03-16  Aurimas Černius <aurisc4@gmail.com>

    Update Lithuanian translation

2024-03-09  Martin <miles@filmsi.net>

    Update Slovenian translation

2024-03-02  Rūdolfs Mazurs <alta.liepa@gmail.com>

    Update Latvian translation

2024-02-26  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2024-02-26  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.6.0   ==========

2024-02-26  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2024-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Document future Debian/Ubuntu build time dependency in README (!121)
    
    When preparing the GParted Live 1.6.0 distribution, which is based on
    Debian unstable ("sid"), compiling GParted failed like this:
        $ make
        ...
        /usr/bin/msgfmt --desktop --template gparted.desktop.in -d ./po -o gparted.desktop
        chmod +x gparted
        /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
        /usr/bin/msgfmt: cannot locate ITS rules for org.gnome.gparted.policy.in
        make[3]: *** [Makefile:1060: org.gnome.gparted.policy] Error 1
        make[3]: *** Waiting for unfinished jobs....
        make[3]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
        make[2]: *** [Makefile:618: all-recursive] Error 1
        make[2]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
        make[1]: *** [Makefile:452: all] Error 2
        make[1]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
        dh_auto_build: error: make -j16 returned exit code 2
        make: *** [debian/rules:9: build] Error 25
        dpkg-buildpackage: error: debian/rules build subprocess returned exit
        status 2
        debuild: fatal error at line 1184:
        dpkg-buildpackage -us -uc -ui failed
    
    This was also previously reported in the GParted Forum [1].  Future
    Debian 13 ("trixie") and Ubuntu 24.04 LTS ("nobel") releases have moved
    the needed gettext translation rules for .policy XML files:
        /usr/share/gettext/its/policy.its
        /usr/share/gettext/its/policy.loc
    to new package libpolkit-gobject-1-dev not installed by default.
    Document this new build time dependency.
    
    Also see commits [2][3] where the equivalent change was needed in the
    Alpine Linux and CentOS continuous integration images.
    
    [1] GParted forum / [SOLVED] Unable to build "msgfmt: cannot locate ITS
        rules for org..."
        http://gparted-forum.surf4.info/viewtopic.php?id=18136
    [2] 57ae8f888bb6f5fb8f06177a478a2374f07ee33c
        Fix .policy file translation failure in Alpine Linux CI image (!107)
    [3] 8450d8c6056a79508bdb91517eb4d8c5dc60fb35
        Fix .policy file translation failure in CentOS CI image (!107)
    
    Closed !121 - Document future Debian/Ubuntu build time dependency in
                  README

2024-02-10  Cheng-Chia Tseng <pswo10680@gmail.com>

    Update Chinese (Taiwan) translation

2023-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove final namespace qualifiers from use of GParted's own enums
    
    ... because it is not necessary and clutters the code.

2024-01-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove optional desktop filemanager dependency from README
    
    ... now Attempt Data Rescue has been removed and GParted no longer has
    code to show "file:/tmp/gparted-roview-XXXXXX" URIs.  Missed in earlier
    commit:
        8ce9074ac672b19f29fd7c1cdc836a874be314cd
        Remove Attempt Data Rescue and use of gpart (!118)

2024-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Makefile.am variables to APPSTREAM*/appstream* (#241)
    
    As the AppStream 1.0 [1] specification no longer describes them as
    appdata files, but instead as metainfo files, rename the Makefile.am
    variables for consistency with the name of the standard.
    
    [1] AppStream 1.0
        https://www.freedesktop.org/software/appstream/docs/index.html
    
    Closes #241 - Move appstream metadata out of legacy path

2024-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Install AppStream file into ${datadir}/metainfo (#241)
    
    AppData files always were a subset of the AppStream specification
    [1][2].  AppStream 0.12 specification [3] onwards says the metainfo
    files will be found when placed in /usr/share/metainfo/ *AND* that
    /usr/share/appdata/ is a legacy location *AND* a future release of
    AppStream will likely drop support for it [4].
    
    Debian 10, RHEL 7 and Ubuntu 18.04 LTS distributions all have the
    /usr/share/metainfo/ directory containing application .appdata.xml and
    .metainfo.xml files.  Ubuntu 16.04 LTS does not have the directory
    despite the AppStream specification [3] claiming it does.  As old
    supported distributions do have the directory, unconditionally update
    this.
    
    For reference are these commits in projects GNOME System Monitor [4] and
    Evince [5] from 2017 making the same change.
    
    [1] AppData Specification [circa 2016]
        https://web.archive.org/web/20160903181519/https://people.freedesktop.org/~hughsient/appdata/
        "Rather than create a new schema from scratch, we'll be using a
        subset of the AppStream metadata proposal.
    
        Applications wishing to have long descriptions, screenshots and
        other useful things are required to ship one or more files in
        /usr/share/appdata/%{id}.appdata.xml.
        "
    [2] AppStream 0.4, 2.2 AppData XML files [circa 2013]
        https://web.archive.org/web/20131204004054/http://www.freedesktop.org/software/appstream/docs/sect-AppStream-Metadata-AppData.html
    [3] AppStream 0.12, 2.1.2 Filesystem locations [circa 2020]
        https://web.archive.org/web/20200615042130/https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#spec-component-location
        "2.1.2 Filesystem locations
    
        Upstream projects can ship one or more metainfo files in
        /usr/share/metainfo/%{id}.metainfo.xml, where id is a unique
        identifier of this specific component.
    
        (>) Note
        Component metadata of type desktop-application as described in
        Section 2.2, "Desktop Applications" can be installed with an
        .appdata.xml extension as well for historical reasons.  AppStream
        implementations will read the XML files as long as they end up in
        the right location on the filesystem.
    
        (!) Important: Legacy Path
        AppStream tools scan the /usr/share/appdata/ path for legacy
        compatibility as well.  It should not be used anymore by new
        software though, even on older Linux distributions (like RHEL 7 and
        Ubuntu 16.04 LTS) the metainfo path is well supported.  Support for
        the legacy path will likely be dropped completely with a future
        AppStream 1.0 release.
        "
    [4] [GNOME System Monitor] Install appdata to the new location
        (bgo#790146)
        https://gitlab.gnome.org/GNOME/gnome-system-monitor/-/commit/43dc0577712a6cd0979e4d85ec5196d507bd6e80
    [5] [Evince] build: Install appstream metadata to non-deprecated
        location
        https://gitlab.gnome.org/GNOME/evince/-/commit/8cae24ea48deafc85265ce42adecb55aa2b57a6f
    
    Closes #241 - Move appstream metadata out of legacy path

2024-02-07  Daniel Rusek <mail@asciiwolf.com>

    Update Czech translation

2024-01-30  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2024-01-26  Fran Dieguez <frandieguez@gnome.org>

    Update Galician translation

2024-01-20  Danial Behzadi <dani.behzi@ubuntu.com>

    Update Persian translation

2023-12-28  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2023-11-30  Juliano de Souza Camargo <julianosc@protonmail.com>

    Update Brazilian Portuguese translation

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor xfs::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor reiserfs::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor reiser4::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor nilfs2::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor ext2::set_used_sectors() into if fail return early (!119)
    
    ... code pattern.  This is to make the code easier to understand by not
    having to remember if condition context for indented code over longer
    distances.  This has been done before.  Here are just 2 examples:
    
    [1] 75bda733bbfcc00cf0cee8a2efca536f5a183f94
        Refactor run_blkid_load_cache() into if fail return early (#131)
    [2] 407e0ac6e3922306133b24359e997b637599f2b3
        Refactor fat16::read_label() into if fail return early pattern (!104)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now unused T, N & S FileSystem member variables (!119)
    
    Now those member variables are unused remove them.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in xfs class (!119)
    
    Restructure the variable parsing code into "if leading text found then
    scan the number" pattern.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in reiserfs class (!119)
    
    Restructure the variable parsing code into "if leading text found then
    scan the number" pattern.
    
    Anchor leading text matches to the start of a new line in the output.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in reiser4 class (!119)
    
    Restructure the variable parsing code into "if leading text found then
    scan the number" pattern.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in nilfs2 class (!119)
    
    And restructure the variable parsing code into "if leading text found
    then scan the number" pattern.
    
    Anchor leading text matches to the start of a new line in the output.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T & N in linux_swap, luks & lvm2_pv classes (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in ext2 class (!119)
    
    FileSystem member variables T, N & S are being used like local variables
    in many of the file system specific set_used_sectors() methods.  They
    are only used within each set_used_sectors() call and not used to
    represent persistent information of a FileSystem interface class or to
    pass information between separate methods.  Therefore stop using them
    and replace them with local variables instead.
    
    This block of code finds a field in the output and scans the number:
        Glib::ustring::size_type index = output.find("Block count:");
        if (index >= output.length() ||
            sscanf(output.substr(index).c_str(), "Block count: %lld", &T) != 1)
                T = -1;
    The if statement says "if leading text is not found or scanning the
    number fails then assign -1".  A sequence of two negatives leading to
    assigning an error value is hard to understand.  Instead this an
    equivalent block from btrfs::set_used_sectors():
        long long total_bytes = -1;
        Glib::ustring::size_type index = output.find("\ntotal_bytes");
        if (index < output.length())
                sscanf(output.substr(index).c_str(), "\ntotal_bytes %lld", &total_bytes);
    This assigns a default error value and the if statement says "if leading
    text found then scan the number".  Much simpler to understand.
    Therefore change the code around to use this same pattern.
    
    Anchor the leading text matches to the start of a new line in the
    output where possible.  Just because it's what some of the other file
    system's set_used_sectors() methods do (btrfs, reiser4 and xfs) and it
    seems like more robust text matching.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using floating point calculation in most FS set_used_sectors() methods (!119)
    
    Replace floating point calculation to convert size and space figures
    from file system block sized units to sectors with an integer
    calculation.  Do this for the same reasons discussed in commit "Stop
    using floating point calculations in FS resize() methods" earlier in
    this patchset.  This will limit the largest file system that GParted can
    read the usage of to 8 EiB - 1 bytes.
    
    There is still a floating point calculation in btrfs::set_used_sectors()
    which is being left because that is apportioning used space figure
    between multiple devices.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder construction of ext2/3/4 resize command (!119)
    
    So that it is similar to other calls to execute_command() and for grep
    friendliness.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder construction of nilfs2 resize command  (!119)
    
    Pass string literal containing the nilfs2 resize command to
    execute_command() rather than a string variable containing the same
    command.  This makes it the same as how most of the other calls to
    execute_command() are written and it makes it more grep friendly.
    
    Before:
        $ grep execute_command src/nilfs2.cc
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -L " + Glib::shell_quote( partition.get_filesystem_label() ) +
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -U " + Glib::shell_quote( Utils::generate_uuid() ) +
            return ! execute_command( "mkfs.nilfs2 -L " + Glib::shell_quote( new_partition.get_filesystem_label() ) +
                success &= ! execute_command( "mount -v -t nilfs2 " + Glib::shell_quote( partition_new.get_path() ) +
    >>          success &= ! execute_command( cmd, operationdetail, EXEC_CHECK_STATUS );
                    success &= ! execute_command( "umount -v " + Glib::shell_quote( mount_point ),
    
    After:
        $ grep execute_command src/nilfs2.cc
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -L " + Glib::shell_quote( partition.get_filesystem_label() ) +
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -U " + Glib::shell_quote( Utils::generate_uuid() ) +
            return ! execute_command( "mkfs.nilfs2 -L " + Glib::shell_quote( new_partition.get_filesystem_label() ) +
                success &= ! execute_command( "mount -v -t nilfs2 " + Glib::shell_quote( partition_new.get_path() ) +
    >>          success &= ! execute_command("nilfs-resize -v -y " + Glib::shell_quote(partition_new.get_path()) + size,
                    success &= ! execute_command( "umount -v " + Glib::shell_quote( mount_point ),
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using floating point calculations in FS resize() methods (!119)
    
    A number of the file system specific resize() methods use floating point
    calculations to convert from the new partition size in sectors to the
    new file system size to be passed to the resize command in bytes or
    kibibytes.  This is bad because there could be rounding errors
    converting from integer to floating point, performing the calculation
    and converting back.  Replace with integer only multiply and divide
    calculations.  Integer division always truncates [1] which is exactly
    what is needed.  The largest integer will be the size of the file system
    in bytes held in a signed 64-bit long long, or Sector or Byte_Value
    typedef of the same type.  This will limit the size that a file system
    can be shrunk to, to 8 EiB - 1 byte.
    
    [1] C++ Arithmetic operators
        https://en.cppreference.com/w/cpp/language/operator_arithmetic
            "the algebraic quotient of integer division is truncated towards
            zero (fractional part is discarded)"
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-22  Sergej A <asvmail.as@gmail.com>

    Update Russian translation

2023-10-21  Florentina Mușat <florentina.musat.28@gmail.com>

    Update Romanian translation

2023-10-19  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2023-10-12  Alan Mortensen <alanmortensen.am@gmail.com>

    Update Danish translation

2023-10-05  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2023-09-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Write file system type as "[Encrypted] FSTYPE" to saved details
    
    The GUI displays the file system of an open encrypted file system as
    "[Encrypted] FSTYPE" [1].  However saved details just writes the file
    system type as "luks".  Update saved details writing code to use the
    same method the GUI currently uses [2].
    
    [1] commit cb3cc505ce89d6f6fbb488defa826a389ae86cdc
        Display "[Encrypted] FSTYPE" in the File System column (#760080)
    
    [2] commit bd6fc67afb772ffa11ac904e3a7130f2253daa66
        Provide virtual Partition::get_filesystem_string() method (#774818)

2023-09-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increment GParted Manual version

2023-09-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove Attempt Data Rescue from the GParted Manual (!118)
    
    Keep the paragraph discussing photorec and move just after testdisk is
    mentioned in the Recovering Partition Tables section.
    
    Closes !118 - Remove Attempt Data Rescue and use of gpart

2023-09-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove Attempt Data Rescue and use of gpart (!118)
    
    gpart scans a drive trying to guess the location of partitions when an
    MBR partition table is lost [1].  However the tool is unmaintained,
    takes hours or days of 100% CPU time to scan a drive and provides no
    progress indication [2][3][4].  We keep recommending killing the gpart
    process and using TestDisk [5] instead.
    
    Therefore remove Device > Attempt Data Rescue and the use of gpart from
    GParted.
    
    [1] Gpart
        https://github.com/baruch/gpart
    [2] Have you had a good or bad experience with Dev->Attempt Data Rescue?
        http://gparted-forum.surf4.info/viewtopic.php?id=17992
        No good, only bad experiences using gpart were reported.
    [3] Gparted does not say anything
        http://gparted-forum.surf4.info/viewtopic.php?id=17749
        Forum user reported waiting 48 hours with no progress indication.
        We recommended using TestDisk.
    [4] How cancel Data Rescue process?
        http://gparted-forum.surf4.info/viewtopic.php?id=18143
        Forum user reported it will take 3 days to scan their external 480GB
        drive.  We recommended using TestDisk instead.
    [5] TestDisk, Data Recovery
        https://www.cgsecurity.org/wiki/TestDisk
    
    Closes !118 - Remove Attempt Data Rescue and use of gpart

2023-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace deprecated Google Test API INSTANTIATE_TEST_CASE_P() (!117)
    
    When compiling the tests, this warning is reported:
    
        $ make check
        ... warning: ...: INSTANTIATE_TEST_CASE_P is deprecated, please use INSTANTIATE_TEST_SUITE_P [-Wdeprecated-declarations]
           static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
                                              ^
        test_SupportedFileSystems.cc:625:1: note: in expansion of macro 'INSTANTIATE_TEST_CASE_P'
    
    Google Test 1.10.0 release notes [1] say:
        High Level Changes:
        This release deprecated "....TEST_CASE" API in favor of
        "....TEST_SUITE".  In a nutshell if you have code that uses
        something like "INSTANTIATE_TYPED_TEST_CASE_P " - this and all other
        "*_TEST_CASE " are now deprecated in favor of more standard
        _TEST_SUITE.
    
    Replace the deprecated API with the new API.
    
    [1] Google Test release v1.10.0
        https://github.com/google/googletest/releases/tag/release-1.10.0
    
    Closes !117 - Require C++11 compilation

2023-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update to Google Test 1.10.0 (!117)
    
    So far GParted includes Google Test 1.8.1 [1], which was the latest
    release which supported pre-C++11 compilers [2].  Now that GParted
    requires C++11 compilation, update to Google Test 1.10.0.  Replace the
    following files and directories from Google Test 1.10.0:
        LICENSE
        README.md
        include/
        src/
    Note the LICENSE file is identical, where as the other files have
    changed.  This includes file additions and removals, hence the change
    to Makefile.am too.
    
    Even though Google Test releases up to and including 1.12.1 are
    compilable with C++11 compilers [3], it is not possible to upgrade
    beyond Google Test 1.10.0 at this time because later releases fail to
    compile on on still supported RHEL / CentOS 7 with this error:
    
        $ cd lib/gtest
        $ make check
        ...
        ./include/gtest/gtest-matchers.h:414:12: error: 'is_trivially_copy_constructible' is not a member of 'std'
                    std::is_trivially_copy_constructible<M>::value &&
                    ^
    
    This failure turns out to be because GCC libstdc++ 4.8.5 doesn't include
    is_trivially_copy_constructible et al [4][5].
    
    [1] commit 2b222978f5e68964a3fa6d9e05e56bfdf6ab0526
        Update to Google Test 1.8.1
    [2] Google Test release v1.8.1
        https://github.com/google/googletest/releases/tag/release-1.8.1
        "The 1.8.x is the last release supporting pre-C++11 compilers."
    [3] Google Test release v1.12.1
        https://github.com/google/googletest/releases/tag/release-1.12.1
        "This will be the last release to support C++11.  Future releases
        will require at least C++14."
    [4] 'is_trivially_copyable' is not a member of 'std'
        https://stackoverflow.com/questions/25123458/is-trivially-copyable-is-not-a-member-of-std/25123551#25123551
        "Some of them are not implemented.  If we look at libstdc++'s C++11
        status page:
        Type properties are listed as partially implemented.
        They list as missing:
        ...
        is trivially_copy_constructible
        "
    [5] The GNU C++ Library, 1. Status, C++11
        https://gcc.gnu.org/onlinedocs/gcc-4.8.3/libstdc++/manual/manual/status.html#status.iso.2011
        "
        | Section  | Description     | Status  | Comments
        ...
        | 20.9.4.3 | Type properties | Partial | Missing
        is_trivially_copyable, is_trivially_constructible,
        is_trivially_default_constructible, is_trivially_copy_constructible,
        is_trivially_move_constructible, is_trivially_assignable,
        is_trivially_default_assignable, is_trivially_copy_assignable,
        is_trivially_move_assignable |
        "
    
    Closes !117 - Require C++11 compilation

2023-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    C++11: Also convert NULL to nullptr in unit tests (!117)
    
    Closes !117 - Require C++11 compilation

2023-08-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    C++11: Convert NULL to nullptr (!117)
    
    In C++11, nullptr [1] is the strongly typed value to use instead of the
    macro NULL [2].  Use everywhere [3][4].
    
    [1] nullptr, the pointer literal (since C++11)
        https://en.cppreference.com/w/cpp/language/nullptr
    [2] NULL
        https://en.cppreference.com/w/cpp/types/NULL
    [3] Bjarne Stroustrup's C++ Style and Technique FAQ, Should I use NULL
        or 0?
        https://www.stroustrup.com/bs_faq2.html#null
            "In C++, the definition of NULL is 0, so there is only an
            aesthetic difference.  I prefer to avoid macros, so I use 0.
            Another problem with NULL is that people sometimes mistakenly
            believe that it is different from 0 and/or not an integer.  In
            pre-standard code, NULL was/is sometimes defined to something
            unsuitable and therefore had/has to be avoided.  That's less
            common these days.
    
            If you have to name the null pointer, call it nullptr; that's
            what it's called in C++11.  Then, "nullptr" will be a keyword.
            "
    [4] What is nullptr in C++? Advantages, Use Cases & Examples
        https://favtutor.com/blogs/nullptr-cpp
            "Advantages of nullptr
            ...
            Compatible: Null pointers are compatible with null pointer
            constants in the C style (such as NULL and 0).  This implies
            that old C code that uses these constants and null pointers can
            communicate with each other in C++.
            "
    
    Closes !117 - Require C++11 compilation

2023-08-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum required gtkmm to 3.18.0 (!117)
    
    As discussed in the previous commit the oldest supported distributions
    now provide gtkmm versions higher that 3.18.0 (which requires C++11
    compilation).  Therefore increase the minimum required version to gtkmm
    3.18.0.  This allows removal of HAVE_LABEL_SET_XALIGN autoconf
    definition and associated fallback code.
    
    Closes !117 - Require C++11 compilation

2023-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Always require C++11 compilation (!117)
    
    All the oldest supported distributions now have versions of GTK C++
    libraries which require C++11 compilation, therefore forcing GParted to
    require C++11 compilation [1][2][3].  Fragment of existing ./configure
    output which lists the library versions requiring C++11 compilation:
    
        $ ./configure
        ...
        checking for glibmm >= 2.45.40 which requires C++11 compilation... yes
        checking for libsigc++ >= 2.5.1 which requires C++11 compilation... yes
        checking for gtkmm >= 3.18.0 which requires C++11 compilation... yes
        checking whether g++ supports C++11 features with -std=gnu++11... yes
    
    The oldest supported distributions and their versions of GTK C++
    libraries and GCC compiler:
    
        Distribution        gtkmm    glibmm   libsigc++   gcc
    
        Debian 10           3.24.0   2.58.0   2.10.1      4.8.3
        RHEL / CentOS 7.9   3.22.2   2.56.0   2.10.0      4.8.5
        SLES 12 SP5         3.20.1   2.48.1   2.8.0       4.8
        Ubuntu 20.04 LTS    3.24.2   2.64.2   2.10.2      9.3.0
    
    Technically GCC didn't have full C++11 support until GCC 4.8.1 [6] and
    SLES 12 SP5 only has GCC 4.8 (as well as many later versions of GCC).
    However which ever version of the GCC compiler is being used to compile
    the GTK C++ libraries it must have all the features needed to compile
    those libraries.
    
    Simplify the configure script and just always require a C++11 capable
    compiler.  This also allows the use of C++11 features in the GParted
    code.
    
    [1] commit cc0740148e6ba0da9e30608deea2aa13078c2584
        port-to-gtk3: Switch to Gtkmm3 (#7)
    [2] commit 707bae6fed6783e84600c6143f0f4bfd7989f56f
        Enable C++11 compilation when using libsigc++ 2.5.1 and later (#758545)
    [3] commit d6d7cb2bbf2fc381b890f63bbbf626eacfc8cdf8
        Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
    [4] SUSE Product Support Lifecycle, SUSE Linux Enterprise Server 12
        https://www.suse.com/lifecycle/#suse-linux-enterprise-server-12
    [5] SUSE package search
        https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=12.5&arch=x86_64&query=&module=
    [6] C++ Standards Support in GCC, C++11 Support in GCC
        https://gcc.gnu.org/projects/cxx-status.html#cxx11
    
    Closes !117 - Require C++11 compilation

2023-09-03  Daniel Rusek <mail@asciiwolf.com>

    Update Czech translation

2023-09-02  Luming Zh <lumingzh@qq.com>

    Update Chinese (China) translation

2023-08-28  Danial Behzadi <dani.behzi@ubuntu.com>

    Update Persian translation

2023-08-20  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2023-08-18  Sabri Ünal <libreajans@gmail.com>

    Update Turkish translation

2023-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing .gitignore entry for test_EraseFileSystemSignatures

2023-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also find system default udev rules in /usr/lib/udev/rules.d (!116)
    
    When blanking of udev rules was first tested [1][2] and added [3] all
    the distributions at the time (CentOS 6, Debian 6, Fedora 19,
    openSUSE 12.2, Ubuntu 12.04 LTS) stored the system default rules in
    directory /lib/udev/rules.d.  Now most distributions (CentOS Stream 9,
    Debian 11, Fedora 38, Ubuntu 22.04 LTS, openSUSE Leap 15.4) store the
    system default rules in directory /usr/lib/udev/rules.d.  Most of these
    distributions have a merged /usr file system [4][5] so /lib is a symlink
    to /usr/lib and the system default rules can still found using the
    original directory.  But openSUSE 15.4 doesn't have a merged /usr so the
    gparted shell wrapper doesn't find the system default rules in directory
    /usr/lib/udev/rules.d and doesn't prevent auto starting of Linux
    Software RAID arrays and bcache devices during a storage probe.
    
    An extra consideration is that Alpine Linux 3.17 doesn't have a merged
    /usr file system, but has both /lib/udev/rules.d and
    /usr/lib/udev/rules.d directories with different rules files.  Therefore
    fix this by checking for system default udev rules in both directories.
    
    [1] Bug 709640 - Linux Swap Suspend and Software RAID partitions not
        recognised, comment 7
        https://bugzilla.gnome.org/show_bug.cgi?id=709640#c7
    [2] Bug 709640 - Linux Swap Suspend and Software RAID partitions not
        recognised, comment 12
        https://bugzilla.gnome.org/show_bug.cgi?id=709640#c12
    [3] a255abf3432ad106fac9c766f0816ada20be8e42
        Prevent GParted starting stopped Linux Software RAID arrays (#709640)
    [4] The Case for the /usr Merge
        http://0pointer.de/blog/projects/the-usr-merge
    [5] The Case for the /usr Merge
        https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid masking/unmasking the empty list of mount units (!116)
    
    After the previous commit "Stop masking the root file system mount
    unit", GParted now reports this error to the terminal on Debian 10 and
    11:
        # gparted
        To few arguments.
        GParted 1.5.0-git
        configuration --enable-online-resize
        libparted 3.2
    
    Debian installations, at least on PC hardware and using BIOS booting so
    they don't have a /boot/efi file system, only have a single file system,
    / (root).  That is now excluded from masking so gparted shell wrapper
    runs systemctl without any mount units to mask.  Hence the error.
        # systemctl --runtime mask --quiet --
        Too few arguments.
        # echo $?
        1
    
    Fix this by only masking and unmasking units when the list of mounts
    is non-empty.
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop masking the root file system mount unit (!116)
    
    Masking the root file system (-.mount) unit lead to a Debian package
    upgrade failing as reported here [1].  This was fixed in systemd 245
    [2][3] by not allowing perpetual units to be masked.  As the root file
    system can't be mounted or unmounted while GParted is running, it
    doesn't need to be prevented by masking the unit.  Therefore stop
    masking the root file system mount unit.
    
    [1] Debian bug #948710 -  handle masked .mount unit more gracefully
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=948710
    [2] systemd issue #14550 - Handle masked .mount units more gracefully
        https://github.com/systemd/systemd/issues/14550
    [3] core: never allow perpetual units to be masked
        https://github.com/systemd/systemd/commit/88414eed6f45f738ae765d9f72d67c6dc5a51950
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-08-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add fallback of removing systemd mount unit masks directly (!116)
    
    On RHEL / CentOS 8 GParted reports this error to the terminal when it is
    closed:
        # gparted
        GParted 1.5.0-git
        configuration --enable-online-resize
        libparted 3.2
    >>  --runtime cannot be used with unmask
        # $?
        0
    
    and leaves mount units masked:
        # systemctl list-units '*.mount'
          UNIT                  LOAD   ACTIVE SUB     DESCRIPTION
          ------------------------------------------------------------------
        * -.mount               masked active mounted Root Mount
        * boot.mount            masked active mounted boot.mount
          ...
    
    This is because of this change [1] released in systemd 239.  Systemd bug
    9393 [2] was raised and the change was reverted [3] in systemd 240.
    According to repology.org only RHEL / CentOS 8 (and clones) and Fedora
    29 shipped with systemd 239 [4].
    
    Fix by detecting non-zero exit status from systemctl and falling back to
    directly removing the runtime mount unit mask files instead.  Then have
    to use systemctl daemon-reload to inform systemd to reload it's
    configuration from disk to discover the masks have been removed.
    
    [1] systemctl: when removing enablement or mask symlinks, cover both
        /run and /etc
       https://github.com/systemd/systemd/commit/4910b35078ad24dcbc63f372b2fee087640201d0
    [2] systemctl no longer allows unmask in combination with --runtime
        #9393
        https://github.com/systemd/systemd/issues/9393
    [3] Revert "systemctl: when removing enablement or mask symlinks, cover
        both /run and /etc"
        https://github.com/systemd/systemd/commit/1830ac51a4ad1d82a198e587207df451b581c821
    [4] Versions for systemd
        https://repology.org/project/systemd/versions
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-07-25  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2023-07-15  Yosef Or Boczko <yoseforb@gnome.org>

    Update Hebrew translation

2023-07-14  Jürgen Benvenuti <jbenvenuti@gnome.org>

    Update German translation

2023-07-11  Sergej A <asvmail.as@gmail.com>

    Update Russian translation

2023-07-09  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2023-07-02  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2023-06-29  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2023-06-25  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2023-06-25  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2023-06-24  Ekaterine Papava <papava.e@gtu.ge>

    Update Georgian translation

2023-06-24  Marcin Zepp <nircek-2103@protonmail.com>

    Fix crash when dealing with 0000-0000 exfat UUID (!115)
    
    GParted crashes when blkid doesn't provide the UUID of the exfat
    partition and its serial has preceding zeroes (and it isn't mounted).
    
    blkid doesn't report UUID if the serial number is 0000-0000 (a.k.a.
    0x0).
    
    Steps to reproduce:
    
        # truncate -s 4M /tmp/disk.img
        # losetup -f --show /tmp/disk.img
        /dev/loop0
        # mkfs.exfat /dev/loop0
        [...]
        exFAT format complete!
        # partprobe /dev/loop0
        # blkid /dev/loop0
        /dev/loop0: UUID="F7BF-ABFF" BLOCK_SIZE="512" TYPE="exfat" PTTYPE="dos"
        # exfatlabel /dev/loop0 -i 0x0
        exfatprogs version : 1.1.3
        New volume serial : 0x0
        # blkid /dev/loop0
        /dev/loop0: BLOCK_SIZE="512" TYPE="exfat" PTTYPE="dos"
        # gparted /dev/loop0
        GParted 1.3.1
        configuration --enable-libparted-dmraid --enable-online-resize
        libparted 3.4
    
        ** (gpartedbin:94926): ERROR **: 10:45:01.894:
        unhandled exception (type std::exception) in signal handler:
        what: basic_string::assign: __pos (which is 18446744073709551615) > this->size() (which is 3)
    
        Trace/breakpoint trap (core dumped)
        # losetup -d /dev/loop0; rm /tmp/disk.img
    
    As blkid doesn't report exfat UUID 0000-0000 FS_Info cache can't report
    it so exfat::read_uuid() is called.  Then `tune.exfat -i /dev/loop0` is
    executed:
    
            # tune.exfat -i /dev/loop0
            exfatprogs version : 1.1.3
            volume serial : 0x0
    
    And exfat::serial_to_blkid_uuid() is called with "0x0", which causes a
    crash.  Fix by safely handling volume serial numbers of any length,
    specifically shorter than 8 hexadecimal digits.
    
    Closes !115 - Fix crash when dealing with 0000-0000 exfat UUID

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return constant reference from ProgressBar::get_text()
    
    get_text() only performs const access on the ProgressBar object so
    return the member string by constant reference.
    
    Previously done for other string returning getters, even though the
    value is assigned to a variable and doesn't save anything:
        1f6e81295b5190a0a67daf9e85b4206faafb725e
        Return constant reference from OperationDetail::get_description() (!94)

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return const reference from OperationDetail::get_progressbar()
    
    The only use of the reference returned from
    OperationDetail::get_progressbar() is to call const methods
    ProgressBar::running(), ::get_fraction() and ::get_text().  Therefore
    make OperationDetail::get_progressbar() return a const reference.

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Generate time remaining text for fraction complete progress bars
    
    As described in the previous commit "Clear progress bar text when
    starting the bar (#230)" progress bar data is either reporting bytes
    copied or fraction complete.  The bytes copied case gets in progress
    text like this:
        544.00 MiB of 1.00 GiB copied (00:00:11 remaining)
    
    But the fraction complete gets no text.
    
    Now also generate time remaining text for progress bars only reporting
    fraction complete.  As with the bytes copied text only add the time
    remaining estimate after 5 seconds have passed.  Looks like:
        (00:01:59 remaining)
    
    This is most useful for NTFS partition copy and resize operations which
    can take a while depending on the amount of data involved.

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear progress bar text when starting it (#230)
    
    These operations use steps which generate progress bar bytes copied
    information text:
    * Partition move or copy using GParted's internal block copy
    * EXT2/3/4 partition move or copy
    * XFS partition copy
    The bytes copied text looks like this (after the copy completes and the
    time remaining is no longer included):
        1.00 GiB of 1.00 GiB copied
    
    And these operations use steps which generate progress bar information
    without text (because the progress bar data only represents a fraction
    complete):
    * EXT2/3/4 partition resize
    * EXT2/3/4 partition create
    * EXT2/3/4 partition format
    * EXT2/3/4 partition check
    * NTFS partition resize
    * NTFS partition copy
    
    In the Applying pending operations dialog, while an operation is being
    applied there are 2 progress bars.  The top progress bar displays either
    a pulse bar or the progress bar data for the current step.  Additionally
    for the relevant steps the progress bar generates the bytes copied text.
    This text, when available, is displayed in small grey characters just
    above the progress bar itself.
    
    Copy a FAT partition and apply.  Bytes copied text is displayed just
    above the top progress bar.  Copy an NTFS partition and apply.  The left
    behind bytes copied text from the previous operation is displayed,
    instead of nothing.
    
    Restart GParted and copy an NTFS partition and apply.  As intended, this
    time there is no bytes copied text displayed just above the top progress
    bar.
    
    As there is just a single ProgressBar object, single_progressbar, fix
    this by clearing the progress bar text each time it is started.
    
    Closes #230 - Missing progress bar text reset when applying operation

2023-06-06  Olga Smirnova <mistresssilvara@hotmail.com>

    Add Interlingue translation

2023-05-26  Sabri Ünal <libreajans@gmail.com>

    Update Turkish translation

2023-05-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also check links to block devices when skipping BlockSpecial unit tests (!113)
    
    Fragment of a failed CI test job from a GiLab job runner which didn't
    allow creation of block special devices looked like:
    
        $ tests/makedev.sh
        mknod -m 0660 /dev/sda b 8 0
        mknod: '/dev/sda': Operation not permitted
        chown: cannot access '/dev/sda': No such file or directory
        mknod -m 0660 /dev/sda1 b 8 1
        mknod: '/dev/sda1': Operation not permitted
        chown: cannot access '/dev/sda1': No such file or directory
        mkdir: created directory '/dev/disk'
        mkdir: created directory '/dev/disk/by-id/'
        '/dev/disk/by-id/gparted-sda' -> '/dev/sda'
    
    test/makedev.sh attempted to create two block devices it wanted for
    testing, but that failed with "Operation not permitted".  It then
    created dangling symbolic link /dev/disk/by-id/gparted-sda -> /dev/sda;
    gparted-sda pointed to a name which didn't exist.
    
    Despite the previous commit testing and skipping every test where the
    block device doesn't exist this unit test still failed:
    
        [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
        test_BlockSpecial.cc:186: Failure
        Failed
        follow_link_name(): Failed to resolve symbolic link '/dev/disk/by-id/gparted-sda'
        test_BlockSpecial.cc:271: Skip test.  Block device '' does not exist
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms)
    
    The unit test called get_link_name() which read the directory
    /dev/disk/by-id and found symbolic link gparted-sda.  It then called
    follow_link_name() passing /dev/disk/by-id/gparted-sda which used
    realpath(3) to get the canonicalised absolute pathname, which includes
    following links.  But as gparted-sda pointed to a non-existent file it
    failed and reported message "Failed to resolve symbolic link ...".  Then
    after that the unit test skips the non-existent block device, but the
    test has already failed at that point.
    
    Fix the unit test by also checking the symbolic link points to an
    existing block device before calling follow_link_name() on it.  This
    works because SKIP_IF_BLOCK_DEVICE_DOESNT_EXIST() uses stat(3), which
    follows symbolic links, in it's verification.
    
    Also put SKIP_IF_BLOCK_DEVICE_DOESNT_EXIST() immediately after each
    initialisation of a block device name for some sort of consistency with
    it's need in this fixed NamedBlockSpecialObjectBySymlinkMatches unit
    test.
    
    Closed !113 - Fix occasional GitLab CI test jobs failures on
                  BlockSpecial unit tests

2023-05-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Skip BlockSpecial unit tests when devices don't exist, for CI test images (!113)
    
    Since November 2022 test_BlockSpecial has been occasionally failing in
    GNOME GitLab Docker CI test jobs like this:
    
        [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBlockDevice
        test_BlockSpecial.cc:216: Failure
        Value of: bs.m_major > 0 || bs.m_minor > 0
          Actual: false
        Expected: true
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBlockDevice (0 ms)
        ...
        [ RUN      ] BlockSpecialTest.TwoNamedBlockSpecialObjectBlockDevices
        test_BlockSpecial.cc:244: Failure
        Value of: bs1.m_major != bs2.m_major || bs1.m_minor != bs2.m_minor
          Actual: false
        Expected: true
        [  FAILED  ] BlockSpecialTest.TwoNamedBlockSpecialObjectBlockDevices (0 ms)
        [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
        test_BlockSpecial.cc:170: Failure
        Failed
        follow_link_name(): Failed to resolve symbolic link '/dev/disk/by-id/gparted-sda'
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms)
        ...
         3 FAILED TESTS
        FAIL test_BlockSpecial (exit status: 1)
    
    As identified previously [1] the Docker CI images no longer have any
    block devices in /dev.  test/makedev.sh script was added to create block
    devices test_BlockSpecial needs for it's testing.  Now a subset of the
    GNOME GitLab job runners additionally prevent creation of block special
    device nodes.  test/makedev.sh reports this:
    
        $ tests/makedev.sh
        mknod -m 0660 /dev/sda b 8 0
        mknod: /dev/sda: Operation not permitted
        chown: cannot access '/dev/sda': No such file or directory
        mknod -m 0660 /dev/sda1 b 8 1
        mknod: /dev/sda1: Operation not permitted
        chown: cannot access '/dev/sda1': No such file or directory
    
    Alternative rejected solutions:
    
    1.  Use fakeroot [2].  Package is available for the 3 distributions used
        in CI jobs.  Does fake stat() call.  Works when run like this in the
        CI test jobs:
            fakeroot -s test/fakeroot.env tests/makedev.sh
            fakeroot -i test/fakeroot.env make check
            fakeroot -i test/fakeroot.env make distcheck
        But if you run fakeroot ... make check on our development machines
        as a non-root user it causes the test_SupportedFileSystems unit
        tests which use losetup to fail.  This is because
        test_SupportedFileSystems thinks it's root inside the fakeroot
        environment but fakeroot doesn't fake enough for losetup to work.
        This makes running tests in the GitLab CI jobs different from how we
        would have to run them on our development machines.  Prefer not to
        do that.
    
    2.  Use GNU ld --wrap [3] to call our own __wrap_stat() allowing
        test_BlockSpecial to provide mocked results to the stat() call in
        constructor BlockSpecial::BlockSpecial().  This works with
        GNU C Library >= 2.33, released 01-Feb-2021, and musl libc,
        therefore it works on CI tested distributions Ubuntu LTS >= 22.04
        and Alpine Linux respectively.  However this fails on earlier glibc
        releases, so will fail on CentOS 7 CI image, as the compiler emits a
        call to __xstat() rather than stat().  This is something to do with
        how glibc's /usr/include/sys/stat.h supported multiple versions of
        stat().  Don't use this as it's doesn't work everywhere.
    
        Additional useful implementation hints.  [4][5]
    
    Choose to fix by just skipping unit tests which need block special names
    to exist in the file system, but don't exist.  This is the same
    technique that test_SupportedFileSystems uses.  So tests/makedev.sh
    creates block devices if it can in the GNOME GitLab CI test images [1]
    and now if that fails the individual unit tests are skipped.
    
    [1] 57983b9fc20c9367f9dd83a8301e903fced5329e
        Create block special devices needed by test_BlockSpecial in GitLab
        CI jobs (!59)
    
    [2] FakeRoot
        https://wiki.debian.org/FakeRoot
    
    [3] ld(1) - Linux manual page
        https://man7.org/linux/man-pages/man1/ld.1.html
            "--wrap=symbol
            Use a wrapper function for symbol.  Any undefined reference to
            symbol will be resolved to "__wrap_symbol".  Any undefined
            reference to "__real_symbol" will be resolved to symbol.
    
            This can be used to provide a wrapper for a system function.
            The wrapper function should be called "__wrap_symbol".  If it
            wishes to call the system function, it should call
            "__real_symbol".
            ...
            "
    
    [4] gcc: error: unrecognized option --wrap
        https://stackoverflow.com/questions/33278164/gcc-error-unrecognized-option-wrap
    
    [5] C++ ld linker --wrap option does not work for internal function calls
        https://stackoverflow.com/questions/44464961/c-ld-linker-wrap-option-does-not-work-for-internal-function-calls
    
    Closed !113 - Fix occasional GitLab CI test jobs failures on
                  BlockSpecial unit tests

2023-05-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Cat /proc/partitions and list /dev in GitLab CI test jobs (!113)
    
    Add these simple debugging aids to the GNOME GitLab CI test job.
    They've been needed before [1] so add them permanently.
    
    [1] 57983b9fc20c9367f9dd83a8301e903fced5329e
        Create block special devices needed by test_BlockSpecial in GitLab
        CI jobs (!59)
            "Contents of /proc/partitions inside the Docker image when this
            test CI job failed:
            ...
            And the listing of /dev/:
            "
    
    Closed !113 - Fix occasional GitLab CI test jobs failures on
                  BlockSpecial unit tests

2023-05-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stick with Alpine Linux 3.17 in the GitLab CI images
    
    Alpine Linux just released new docker image 3.18, updating latest from
    3.17 [1], which causes the GNOME GitLab CI jobs to fail like this:
    
        $ apk add gnome-common yelp-tools automake autoconf glib-dev libtool g++ parted-dev gtkmm3-dev itstool make git polkit-dev
        ERROR: unable to select packages:
          gnome-common (no such package):
            required by: world[gnome-common]
    
    Based on this blog [2] I printed the apk repository configuration file
    in Alpine Linux 3.17 and 3.18 docker images in GitLab CI jobs and found
    this contents:
    
    Alpine Linux 3.17
        $ cat /etc/apk/repositories
        https://dl-cdn.alpinelinux.org/alpine/v3.17/main
        https://dl-cdn.alpinelinux.org/alpine/v3.17/community
    
    Alpine Linux 3.18
        $ cat /etc/apk/repositories
        https://dl-cdn.alpinelinux.org/alpine/v3.18/main
        https://dl-cdn.alpinelinux.org/alpine/v3.18/community
    
    So what I conclude is that the packages GParted needs aren't yet
    available or being distributed for Alpine Linux 3.18.  Therefore fix
    this by explicitly sticking with Alpine Linux 3.17.
    
    [1] Alpine docker images
        https://hub.docker.com/_/alpine/
        * 3.18.0, 3.18, 3, latest
        https://github.com/alpinelinux/docker-alpine/blob/571516c7ce3ecec3c70541d13529a4abb33ba362/x86_64/Dockerfile
        Committed 2023-May-09
    
    [2] ERROR: unable to select packages error on Alpine Linux
        https://www.hasanaltin.com/error-unable-to-select-packages-error-on-alpine-linux/

2023-04-28  Boyuan Yang <073plan@gmail.com>

    Update Chinese (China) translation

2020-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Briefly comment STAT_* enumerators

2020-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove superfluous STAT_FORMATTED
    
    STAT_FORMATTED is only used inside snap_to_mebibyte() to suppress
    enforcement that partition boundaries must not overlay the MBR or EBRs
    when merely formatting existing partitions.  However since commit [1],
    snap_to_mebibyte() is only called inside the dialogs composing Create
    New, Copy / Paste into New and Resize / Move operations and never when
    composing a Format operation or any other operation which doesn't change
    partition boundaries.  Therefore remove STAT_FORMATTED.
    
    [1] 7c94b7d92060ef7b14be115edb95d6720186f75e
        Snap partition boundaries before dialogs update FS usage (#48)

2020-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix available space calculation in Dialog_Partition_New::set_data()
    
    The available number of sectors 'total_length' is calculated as one
    sector too few.  However this doesn't matter because when composing a
    new partition in Dialog_Partition_New::Get_New_Partition() the dialog
    fits the end of the partition to the end of the unallocated partition
    'new_partition->sector_end' in which it is being created, not the
    available space.  Missed in earlier commit:
        4f84cff781b6c2a1a9f8dd6d8438acddfb0fe5a0
        cleanups
    
    Anyway correct the calculation.

2020-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary portion of MiB alignment check
    
    As a partition's position is completely defined by it's starting and
    ending sector, it is aligned if both boundaries are aligned.  The size
    of a partition just depends on the starting and ending sector.
    Therefore it is never necessary to also check if the size of the
    partition is also an exact multiple of MiB.  Remove this unnecessary
    portion of the alignment check when resizing/moving a partition (or
    copy/pasting into a new partition).

2023-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now duplicated Win_GParted::display_partitions member (#227)
    
    Now Win_GParted::m_display_device.partitions is an identical copy of
    Win_GParted::display_partitions with the same lifetime.  That's wasteful
    and pointless.  Therefore remove the later and use the former in it's
    place.
    
    Closes #227 - Unable to allocate 1 MiB between partitions when moving to
                  the right

2023-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use current Device object for Create and Paste dialogs too (#227)
    
    The Create New and Paste dialogs also create partitions and have to
    honour currently composed partitions while doing so.  Therefore they
    must have a Device object containing the currently composed partition
    layout for passing into snap_to_alignment() and below.  So copy the
    current Device object when refreshing the visual at the same time
    visual_partitions is generated and use in all 3 dialogs which compose
    new partitions.
    
    Note that Create New and Paste aren't subject to the same bug as Resize/
    Move was because the code in snap_to_mebibyte() [1] checked the
    partition object being composed has status STAT_REAL.  This is true for
    partition objects created by the Resize/Move dialog, but not true for
    the Create New and Paste dialogs which set status to STAT_NEW and
    STAT_COPY respectively instead.
    
    [1] Dialog_Base_Partition::snap_to_mebibyte() lines 418 to 438
        https://gitlab.gnome.org/GNOME/gparted/-/blob/GPARTED_1_5_0/src/Dialog_Base_Partition.cc#L418
    
    Closes #227 - Unable to allocate 1 MiB between partitions when moving to
                  the right

2023-04-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop forcing 1 MiB gap when moving common partition boundary to the right (#227)
    
    Start with 2 partitions next to each other, containing file systems that
    GParted can move and resize.
    EG:
        |[#1 ext2    ][#2 swap    ]    |
    
    Move the start of partition #2 to the right.  Then attempt to move the
    end of partition #1 to the right to meet it.
    EG:
        |[#1 ext2       ][#2 swap ]    |
    
    The Resize/Move dialog will allow the free space following to be set to
    0 so partition #1 is again adjacent to partition #2, but after closing
    the dialog a forced 1 MiB gap is added, shrinking the composed size of
    partition #1 by that 1 MiB.
    
    If instead the first operation to shrink and move partition #2 is
    applied, then partition #1 can be successfully resize right up to
    partition #2 without a 1 MiB gap.
    
    Relevant call sequence:
        Win_GParted::activate_resize()
          Dialog_Partition_Resize_Move::Dialog_Partition_Resize_Move()
          Dialog_Base_Partition::Get_New_Partition()
            prepare_new_partition()
              snap_to_alignment()
                snap_to_mebibyte()
    
    prepare_new_partition() created a new partition object to correctly
    represent the resized/moved partition #1.  However this code in
    snap_to_mebibyte() [1] determined that the new location for partition #1
    overlapped with where partition #2 currently is on disk, not where
    partition #2 will be after the previous operation is applied, therefore
    it forced a 1 MiB decrease in partition #1's size creating the gap.
    This is because snap_to_mebibyte() is working with the on disk view of
    the partitions obtained from devices[current_device] passed into the
    Dialog_Partition_Resize_Move() constructor.  Hence why applying the
    operations one at a time doesn't suffer from the forced 1 MiB gap.
    
    Fix this by creating a copy of the current device object, replacing the
    on disk partition layout with the composed partition layout as displayed
    in the UI.  Then pass this into the Dialog_Partition_Resize_Move
    constructor.
    
    [1] Dialog_Base_Partition::snap_to_mebibyte() lines 418 to 438
        https://gitlab.gnome.org/GNOME/gparted/-/blob/GPARTED_1_5_0/src/Dialog_Base_Partition.cc#L418
    
    Closes #227 - Unable to allocate 1 MiB between partitions when moving to
                  the right

2023-04-09  Asier Sarasua Garmendia <asiersarasua@ni.eus>

    Update Basque translation

2023-03-12  Sabri Ünal <libreajans@gmail.com>

    Update Turkish translation

2023-03-07  Fabio Tomat <f.t.public@gmail.com>

    Update Friulian translation

2023-02-28  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2023-02-26  Aurimas Černius <aurisc4@gmail.com>

    Update Lithuanian translation

2023-02-26  Fabio Tomat <f.t.public@gmail.com>

    Update Friulian translation

2023-02-24  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2023-02-21  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2023-02-21  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.5.0   ==========

2023-02-21  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2023-02-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Resolve compiler warning from gen_password()
    
    More recent g++ versions produce these warnings:
        test_PasswordRAMStore.cc: In member function ‘virtual void GParted::PasswordRAMStoreTest_TotalErasure_Test::TestBody()’:
        test_PasswordRAMStore.cc:61:32: warning: ‘                    ’ directive output truncated writing 20 bytes into a region of size 10 [-Wformat-truncation=]
          snprintf( buf, sizeof( buf ), "password%03u                    ", i );
                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        test_PasswordRAMStore.cc:61:10: note: ‘snprintf’ output 32 bytes into a destination of size 21
          snprintf( buf, sizeof( buf ), "password%03u                    ", i );
          ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    snprintf() [1] truncates the printed string to the specified size so
    didn't overflow the buffer.  However clear the warning by making the
    formatted string always exactly 20 characters long, followed by the
    terminating NUL character to exactly fill the buffer.
    
    [1] print3(f) - Linux manual page
        https://man7.org/linux/man-pages/man3/snprintf.3.html
        "The functions snprintf() and vsnprintf() write at most size bytes
        (including the terminating null byte ('\0')) to str.
        "

2023-02-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use Automake noinst_HEADERS to list GParted header files
    
    Using Automake variable EXTRA_DIST [1] to list the GParted header files
    seems overly general.  Instead use noinst_HEADERS [2] as it better
    describes GParted header files.  Header files which need to be
    distributed in the archive, but not part of an installed library so not
    to be installed below /usr/include.
    
    [1] GNU Automake manual, 14.1 Basics of Distribution
        https://www.gnu.org/software/automake/manual/html_node/Basics-of-Distribution.html
            "..., it is still common to have files to be distributed which
            are not found by the automatic rules.  You should listed these
            files in the EXTRA_DIST variable.  You can mention files in
            subdirectories in EXTRA_DIST.
            "
    
    [2] GNU Automake manual, 9.2 Header files
        https://www.gnu.org/software/automake/manual/html_node/Headers.html
            "Usually, only header files that accompany installed libraries
            need to be installed.  Headers used by programs or convenience
            libraries are not installed.  The noinst_HEADERS variable can be
            used for such headers.  However, when the header belongs to a
            single convenience library or program, we recommend listing it
            in the program's or library's _SOURCES variable (see Defining
            program sources) instead of in noinst_HEADERS.  This is clearer
            for the Makefile.am reader.  noinst_HEADERS would be the right
            variable to use in a directory containing only headers and no
            associated library or program.
    
            All header files must be listed somewhere; in a _SOURCES
            variable or in a _HEADERS variable.  Missing ones will not
            appear in the distribution.
            "

2023-02-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace fragment of unit test code with trim_trailing_new_line()

2016-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use libparted geometry to bound writing in erase_filesystem_signatures()
    
    The code in erase_filesystem_signatures() used libparted
    ped_device_write() which allowed any sector in the whole disk device to
    be written.  The code only depended on calculations of somewhat
    complicated zero offset ranges and the start partition offset to ensure
    that it didn't zero sectors outside the target partition.  The code
    doesn't overwrite partition boundaries, but there have been updates and
    bug fixes to the calculation code.  To improve the safety create a
    libparted geometry representing the partition, or whole disk device,
    to be cleared and use ped_geometry_write() so that libparted enforces
    writes are only within the partition boundary being erased.
    
    Deliberately breaking erase_filesystem_signatures() code so that it
    tries to write past the end of the partition produces this dialog:
    
                            Libparted Error
        (-) Attempt to write sectors 1024000-1024007 outside of
            partition on /dev/sdb.
                                          [ Cancel ] [ Ignore ]
    
    And trying to write before the start of the partition produces this
    dialog:
    
                           Libparted Bug
        (-) Assert (offset >= 0) at cs/geom.c:375 in function
            ped_geometry_write() failed.
                                                       [ No ]
    
    Followed by GParted aborting and producing a core dump.  Not ideal from
    libparted, but it does prevent GParted writing outside the partition
    boundaries and only occurs in the case of a bug in
    erase_filesystem_signatures() which is exercised on every Create and
    Format Partition operation and now also unit tested.  So not something
    we will let through to the users.

2023-02-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit test of erasing Promise FastTrack RAID signatures (#220)
    
    Since the previous commit "Also erase all Promise FastTrack RAID
    signatures" the previous failing IntelSoftwareRAIDUnaligned test now
    passes along with the new PromiseFastTrackRaid* tests.
        $ ./test_EraseFileSystemSignatures
        Running main() from test_EraseFileSystemSignatures.cc
        DISPLAY=":0.0"
        [==========] Running 4 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 4 tests from EraseFileSystemSignaturesTest
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned
        [       OK ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned (158 ms)
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned
        [       OK ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned (81 ms)
        [ RUN      ] EraseFileSystemSignaturesTest.PromiseFastTrackRAIDAligned
        [       OK ] EraseFileSystemSignaturesTest.PromiseFastTrackRAIDAligned (74 ms)
        [ RUN      ] EraseFileSystemSignaturesTest.PromiseFastTrackRAIDUnaligned
        [       OK ] EraseFileSystemSignaturesTest.PromiseFastTrackRAIDUnaligned (74 ms)
        [----------] 4 tests from EraseFileSystemSignaturesTest (387 ms total)
    
        [----------] Global test environment tear-down
        [==========] 4 tests from 1 test case ran. (387 ms total)
        [  PASSED  ] 4 tests.
    
    Closes #220 - Format to Cleared not clearing "pdc" ataraid signature

2023-01-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also erase all Promise FastTrack RAID signatures (#220)
    
    User reported that GParted didn't clear a pdc (Promise FastTrack) RAID
    signature [1].  Reproduce this issue by creating a 16 MiB - 512 byte
    test image with Promise FastTrack RAID signatures at all recognised
    offsets [2].
        $ python << 'EOF'
        signature = b'Promise Technology, Inc.'
        import os
        fd = os.open('/tmp/test.img', os.O_CREAT|os.O_WRONLY)
        os.ftruncate(fd, 16*1024*1024 - 512)
        for offset in [63, 255, 256, 16, 399, 591, 675, 735, 911, 974, 991, 951, 3087]:
            os.lseek(fd, -(offset*512), os.SEEK_END)
            os.write(fd, signature)
        os.close(fd)
        EOF
    
    Then use GParted Format to > Cleared.
        $ sudo ./gpartedbin /tmp/test.img
    
    Afterwards blkid, and therefore GParted, still recognises this as a
    Promise FastTrack RAID member.
        $ blkid /tmp/test.img
        /tmp/test.img: TYPE="promise_fasttrack_raid_member"
    
    This is because the test image still contains multiple signatures.
        $ hexdump -C /tmp/test.img | grep Promise
        00e7e000  50 72 6f 6d 69 73 65 20  54 65 63 ...  |Promise Technolo|
        00fce000  50 72 6f 6d 69 73 65 20  54 65 63 ...  |Promise Technolo|
        00fdfe00  50 72 6f 6d 69 73 65 20  54 65 63 ...  |Promise Technolo|
        00ff8000  50 72 6f 6d 69 73 65 20  54 65 63 ...  |Promise Technolo|
    
    Used a test image not an exact multiple of MiBs because drives generally
    aren't an exact MiB multiple in size either and as the clearing of ZFS
    labels L2 and L3 by writes of zeros at the end of the drive is rounded
    to 256 KiBs there will be sectors after that not zeroed where other
    Promise signatures remain.  The above signatures map back to these
    sectors before the end:
        16*1024*1024 - 512 = 16776704
                                        512b sectors   KiB
        (0x00e7e000 - 16776704) / 512 = -3087          -1543.5
        (0x00fce000 - 16776704) / 512 =  -399           -199.5
        (0x00fdfe00 - 16776704) / 512 =  -256           -128
        (0x00ff8000 - 16776704) / 512 =   -63           -31.5
    Promise FastTrack RAID signatures are always at multiples 512-byte
    sectors (code uses left shift 9 to convert from sectors to byte offset)
    [2].
    
    Fix this by:
    1. Replace existing zeroing of 3 ranges relative to the end of the
       device to be a single range covering the ZFS labels L2 and L3 to the
       end of the drive.  This will also clear the SWRaid 0.90 & 1.0
       super blocks, the Nilfs2 secondary super block, the Intel Software
       RAID signature found not zeroed in the unaligned unit test case and
       the above Promise FastTrack RAID signatures at -199.5 KiB and later.
    2. Add zeroing of the final Promise FastTrack RAID signature at sector
       -3087.
    
    Performed a review of all the other ATARAID super blocks detected by
    blkid (files *_raid.c) [3] and they are all located within the last 11
    sectors so will be zeroed by case 1. above.
    
    [1] GParted forum thread: How to remove a ataraid partition ?
        http://gparted-forum.surf4.info/viewtopic.php?id=18104
    
    [2] blkid from util-linux promise_raid.c:probe_pdcraid()
        https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/tree/libblkid/src/superblocks/promise_raid.c?h=v2.38.1#n27
    
    [3] blkid RAID member detection (files *_raid.c)
        https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/tree/libblkid/src/superblocks/?h=v2.38.1
    
    Closes #220 - Format to Cleared not clearing "pdc" ataraid signature

2023-02-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Speed up signature erasing unit test in Alpine Linux CI test job (#220)
    
    Each test in test_EraseFileSystemSignatures is taking just over 10
    seconds to run in the Alpine Linux CI image:
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned
        [       OK ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned (10045 ms)
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned
        ...
        [  FAILED  ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned (10048 ms)
        [----------] 2 tests from EraseFileSystemSignaturesTest (20093 ms total)
    
        [----------] Global test environment tear-down
        [==========] 2 tests from 1 test case ran. (20093 ms total)
    
    This is because the udevadm command is not found and so settle_device()
    waits for 10 seconds in this call chain:
        erase_filesystem_signatures()
          settle_device(SETTLE_DEVICE_APPLY_MAX_WAIT_SECONDS)
            sleep(10)
    
    Install udevadm command into the Alpine Linux CI job docker image to fix
    this.  Now it's on a par with the time taken in the other distro CI test
    jobs:
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned
        [       OK ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned (417 ms)
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned
        ...
        [  FAILED  ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned (165 ms)
        [----------] 2 tests from EraseFileSystemSignaturesTest (582 ms total)
    
        [----------] Global test environment tear-down
        [==========] 2 tests from 1 test case ran. (582 ms total)
    
    Closes #220 - Format to Cleared not clearing "pdc" ataraid signature

2023-02-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move duplicated test code into shared modules (#220)
    
    Move common testing code which doesn't need linking with GParted objects
    into the common module.  Move the remaining common code used to print
    GParted objects using the insertion operator (operator<<) into the
    insertion_operators module.  Split the common code like this so that the
    operator<<(std::ostream&, const OperationDetail&) function is not
    included in test_PipeCapture and it is not forced to link with all the
    non-UI related GParted objects.
    
    The Automake manual provides guidance that when a header belongs to a
    single program it is recommended to be listed in the program's _SOURCES
    variable and for a directory only containing header files listing them
    in the noinst_HEADERS variable is the right variable to use [1].
    However the guidance doesn't cover this case for common.h and
    insertion_operators.h; header files in a directory with other files and
    used by multiple programs.  So just because we have gparted_core_OBJECTS
    (normal Makefile, not Automake special variable) listing objects to link
    with, choose to use noinst_HEADERS Automake variable to list needed
    headers.
    
    [1] GNU Automake manual, 9.2 Header files
        https://www.gnu.org/software/automake/manual/html_node/Headers.html
            "Usually, only header files that accompany installed libraries
            need to be installed.  Headers used by programs or convenience
            libraries are not installed.  The noinst_HEADERS variable can be
            used for such headers.  However, when the header belongs to a
            single convenience library or program, we recommend listing it
            in the program's or library's _SOURCES variable (see Defining
            program sources) instead of in noinst_HEADERS.  This is clearer
            for the Makefile.am reader.  noinst_HEADERS would be the right
            variable to use in a directory containing only headers and no
            associated library or program.
    
            All header files must be listed somewhere; in a _SOURCES
            variable or in a _HEADERS variable.  Missing ones will not
            appear in the distribution.
            "
    
    Closes #220 - Format to Cleared not clearing "pdc" ataraid signature

2023-02-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add initial unit test of erase_filesystem_signatures() (#220)
    
    Initially just testing erasing of Intel Software RAID signatures.
    Chosen because it was expected to work, but turned out not to be true in
    all cases.
    
    The code needs to initialise GParted_Core::mainthread, construct
    Gtk::Main() and execute xvfb-run because of this call chain:
        GParted_Core::erase_filesystem_signatures()
          GParted_Core::settle_device()
            Utils::execute_command ("udevadm settle ...")
              status.foreground = (Glib::Thread::self() == GParted_Core::mainthread)
              Gtk::Main::run()
    This was also needed when testing file system interface classes as
    discussed in commits [1][2].
    
    The test fails like this:
        $ ./test_EraseFileSystemSignatures
        ...
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned
        [       OK ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDAligned (155 ms)
        [ RUN      ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned
        test_EraseFileSystemSignatures.cc:286: Failure
        Failed
        image_contains_all_zeros(): First non-zero bytes:
        0x00001A00  "Intel Raid ISM C"  49 6E 74 65 6C 20 52 61 69 64 20 49 53 4D 20 43
        test_EraseFileSystemSignatures.cc:320: Failure
        Value of: image_contains_all_zeros()
          Actual: false
        Expected: true
        [  FAILED  ] EraseFileSystemSignaturesTest.IntelSoftwareRAIDUnaligned (92 ms)
    
    Manually write the same test image:
        $ python << 'EOF'
        signature = b'Intel Raid ISM Cfg Sig. '
        import os
        fd = os.open('/tmp/test.img', os.O_CREAT|os.O_WRONLY)
        os.ftruncate(fd, 16*1024*1024 - 512)
        os.lseek(fd, -(2*512), os.SEEK_END)
        os.write(fd, signature)
        os.close(fd)
        EOF
    
    Run gpartedbin /tmp/test.img and Format to > Cleared.  GParted continues
    to display the the image file as containing an ataraid signature.
        $ blkid /tmp/test.img
        /tmp/test.img: TYPE="isw_raid_member"
        $ hexdump -C /tmp/test.img
        00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        00fffa00  49 6e 74 65 6c 20 52 61  69 64 20 49 53 4d 20 43  |Intel Raid ISM C|
        00fffa10  66 67 20 53 69 67 2e 20  00 00 00 00 00 00 00 00  |fg Sig. ........|
        00fffa20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        00fffe00
    
    This signature is not being cleared when the device/partition/image size
    is 512 bytes smaller than a whole MiB because the last 3.5 KiB is left
    unwritten.  This is because the last block of zeros written is 8 KiB
    aligned to 4 KiB at the end of the device.
    
    [1] a97c23c57c693b77724970d2f99702d7be18b4bc
        Add initial create ext2 only FileSystem interface class test (!49)
    [2] 8db9a83b39b82785dcbcc776ac259aa7986c0955
        Run test program under xvfb-run to satisfy need for an X11 display (!49)
    
    Closes #220 - Format to Cleared not clearing "pdc" ataraid signature

2023-01-29  Jordi Mas i Hernandez <jmas@softcatala.org>

    Update Catalan translation

2023-01-13  Goran Vidović <trebelnik2@gmail.com>

    Update Croatian translation

2023-01-09  Alan Mortensen <alanmortensen.am@gmail.com>

    Update Danish translation

2023-01-05  Seong-ho Cho <shcho@gnome.org>

    Update Korean translation

2022-12-28  Enrico Nicoletto <hiko@duck.com>

    Update Brazilian Portuguese translation

2022-12-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum XFS size to 300 MiB (#217)
    
    As documented in the previous commit xfsprogs >= 5.19.0 refuses to
    create an XFS file system smaller than 300 MiB.
    
        $ truncate -s $((300*1024*1024-1)) test.img
        $ ls -l test.img
        -rw-r--r--    1 auser    auser   314572799 Dec 21 11:01 test.img
        $ mkfs.xfs -V
        mkfs.xfs version 6.0.0
        $ mkfs.xfs test.img
        Filesystem must be larger than 300MB.
        ...
        $ echo $?
        1
    
    Successfully create an XFS file system at minimum size of 300 MiB.
    
        $ truncate -s $((300*1024*1024)) test.img
        $ ls -l test.img
        -rw-r--r--    1 auser    auser   314572800 Dec 21 11:05 test.img
        $ mkfs.xfs test.img
        ...
        $ echo $?
        0
        $ blkid test.img
        test.img: UUID="..." BLOCK_SIZE="512" TYPE="xfs"
    
    Increase the GParted minimum XFS size to 300 MiB.  For simplicity and
    because the XFS developers said of smaller XFS file systems [1]:
        "are known to have performance and redundancy problems that are not
        present on the volume sizes that XFS is best at handling"
    regardless of the version of mkfs.xfs used to create that XFS then apply
    to all versions of xfsprogs.
    
    [1] https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=6e0ed3d19c54603f0f7d628ea04b550151d8a262
        mkfs: stop allowing tiny filesystems
    
    Closes #217 - GitLab CI test job failing with new mkfs.xfs error
                  "Filesystem must be larger than 300MB."

2022-12-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum unit test FS image size to 320 MiB (#217)
    
    From 27-Nov-2022 the alpine_test GitLab CI job started failing,
    reporting errors creating XFS file systems in the
    test_SupportedFileSystems unit test like this:
    
        [ RUN      ] My/SupportedFileSystemsTest.Create/xfs
        test_SupportedFileSystems.cc:501: Failure
        Value of: m_fs_object->create(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        mkfs.xfs -f -L '' '/builds/GNOME/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
    
        Filesystem must be larger than 300MB.
        ...
    
    This is because Docker image "alpine:latest" has updated to Alpine Linux
    3.17 which includes xfsprogs 6.0.0 which includes this change (first
    released in xfsprogs 5.19.0):
    
        https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=6e0ed3d19c54603f0f7d628ea04b550151d8a262
        mkfs: stop allowing tiny filesystems
    
        Refuse to format a filesystem that are "too small", because these
        configurations are known to have performance and redundancy problems
        that are not present on the volume sizes that XFS is best at
        handling.
    
        Specifically, this means that we won't allow logs smaller than 64MB,
        we won't allow single-AG filesystems, and we won't allow volumes
        smaller than 300MB.
    
    Increase the default unit test file system image size from 256 MiB to
    256+64 = 320 MiB to avoid this error.
    
    Closes #217 - GitLab CI test job failing with new mkfs.xfs error
                  "Filesystem must be larger than 300MB."

2022-12-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable repair when checking exfat file systems (!109)
    
    GParted's check operation is a check and if possible repair.  For most
    file system types GParted already requests that the file system is
    repaired.  fsck.exfat -y flag has been available since the first release
    of exfatprogs 1.0.1 [1] so unconditionally add this.
    
    [1] exfatprogs 1.0.1 fsck/fsck.c:main() case 'y':
        https://github.com/exfatprogs/exfatprogs/blob/1.0.1/fsck/fsck.c#L1231
    
    !109 - Enable repair when checking exfat file systems

2022-12-20  Aleksandr Melman <Alexmelman88@gmail.com>

    Update Russian translation

2022-12-01  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2022-11-28  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2022-11-27  Yaron Shahrabani <sh.yaron@gmail.com>

    Update Hebrew translation

2022-11-27  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2022-11-20  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2022-11-20  Zurab Kargareteli <zuraxt@gmail.com>

    Update Georgian translation

2022-11-20  Jürgen Benvenuti <jbenvenuti@gnome.org>

    Update German translation

2022-11-20  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2022-11-20  Jürgen Benvenuti <jbenvenuti@gnome.org>

    Update German translation

2022-11-19  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2022-11-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rewrite GParted_Core::update_bootsector() (#164)
    
    The code was overly complicated in how it converted to the 32-bit little
    endian on-disk representation of the Hidden Sectors field.  It did:
    1. Formatted the partition start sector as a hexadecimal string.
    2. Padded it to 8 digits.
    3. Reversed pairs of digits.
    4. Converted pairs of hexadecimal digits to bytes of binary data.
    5. Wrote the 4 bytes of binary data to the Hidden Sectors field.
    There is no need for all this string manipulation to convert to a 32-bit
    little endian value.  Just do this:
    1. Truncate (signed 64-bit) partition start sector to 32-bit.
    2. Convert from host native to little endian.
    3. Write as 4 bytes of binary data to the Hidden Sectors field.
    
    The code also ignores write errors.  ofstream.write() only copies the
    data into an in process buffer [1] and the data is not passed to the OS
    to write to the open file handle until ofstream.close() [2] is called.
    However the status of close() was not checked so a failure of the OS to
    perform the write would go unreported.
    
    In the case of a failure providing the user with a command line to set
    the Hidden Sectors field is excessive.  Updating the Hidden Sectors is
    no more or less likely to fail than for any other storage manipulation
    action.  For example GParted doesn't provide command line instructions
    to update a partition size if a libparted call fails.  Therefore remove.
    
    Rewrite the code to resolve the above issues and lay it out using
    if-operation-fails-return-early pattern.
    
    [1] std::ostream::write()
        "... it inserts characters into associated stream_buffer object as
        if calling its member function sputc until n characters have been
        written or until an insertion fails ..."
        https://cplusplus.com/reference/ostream/ostream/write/
    
    [2] std::ofstream::close()
        "Any pending output sequence is written to the file."
        https://cplusplus.com/reference/fstream/ofstream/close/
    
    Closes #164 - GParted crashes copying NTFS partition to starting beyond
                  2TiB

2022-11-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash when copying NTFS to starting beyond 2 TiB (#164)
    
    Create test setup using a 4 TiB loop device:
        # truncate -s 4T /tmp/disk.img
        # losetup -f --show /tmp/disk.img
        /dev/loop0
    Create 2 x 1 TiB partitions.  First at offset 1 MiB, second at offset
    2 TiB:
        # sgdisk --new 1:2048:2147485696 --typecode 1:0700 /dev/loop0
        # sgdisk --new 2:4294967296:6442450944 --typecode 2:0700 /dev/loop0
        # partprobe /dev/loop0
    Create NTFS file system in the first partition:
        # mkntfs -Q /dev/loop0p1
    
    Then use GParted to copy the first NTFS partition into the second
    partition.  GParted crashes:
        # gpartedbin /dev/loop0
        ...
        (gpartedbin:14660): glibmm-ERROR **: 20:39:01.191:
        unhandled exception (type std::exception) in signal handler:
        what: basic_string::_M_replace_aux
    
        Trace/breakpoint trap
        # echo $?
        133
    
    Overview of what is happening is that GParted_Core::update_bootsector()
    is attempting to set the Hidden Sectors [1] field in the NTFS Partition
    Boot Sector (PBS) to the start sector of the newly copied /dev/loop0p2
    partition.  But the sector number is greater than will fit in a 32-bit
    unsigned integer, which the code doesn't handle.
    
    Specifically the code prints the sector number as a hexadecimal number
    into string 'hex'.  As the target partition starts at exactly 2 TiB then
    hex="100000000" (9 hexadecimal digits long).  Next:
        hex.insert(0, 8 - hex.length(), '0');
    is meant to pad the beginning of the 'hex' string with '0's to make the
    string 8 character long.  But the string is already 9 character long so
    8 - 9 is -1 which as unsigned integral type size_t [2] is 2^64-1.  So
    insert() is trying to insert 18446744073709551615 '0's at the start of
    the 'hex' string!  Hence the crash.
    
    mkntfs refuses to accept an explicit partition start sector of 2^32 or
    larger:
        # mkntfs -Q --partition-start 4294967296 /dev/loop0p2
        Invalid partition start sector.  Maximum is 4294967295 (2^32-1).
        # echo $?
        1
    
    When mkntfs can't determine the drive geometry and partition offset, as
    is the case on loop devices or the partition start sector is 2^32 or
    larger, then mkntfs writes zero into Hidden Sectors:
        # mkntfs -Q /dev/loop0p1
        The partition start sector was not specified for /dev/loop0p1 and it could not be obtained automatically.  It has been set to 0.
        ...
        To boot from a device, Windows needs the 'partition start sector', ...
        Windows will not be able to boot from this device.
        Creating NTFS volume structures.
        mkntfs completed successfully. Have a nice day.
        # echo $?
        0
        # hexdump -C /dev/loop0p1 | head -2
        00000000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
        00000010  00 00 00 00 00 f8 00 00  00 00 00 00 00 00 00 00  |................|
                                                       ^^ ^^ ^^ ^^
    Hidden Sectors value at offset 0x1C in the NTFS Partition Boot Sector.
    
    So mkntfs is warning, writing the Hidden Sectors as zero and reporting
    success.  Fix GParted in an equivalent way when it is updating the
    Hidden Sectors for a moved or copied NTFS which starts at sector 2^32
    and beyond.
    
    After this fix the operational details for the same copy operation are:
        Copy /dev/loop0p1 to /dev/loop0p2
        * calibrate /dev/loop0p1                                   (SUCCESS)
        * calibrate /dev/loop0p2                                   (SUCCESS)
        * set partition type on /dev/loop0p2                       (SUCCESS)
        * copy file system from /dev/loop0p1 to /dev/loop0p2       (SUCCESS)
        * update boot sector of ntfs file system on /dev/loop0p2   (WARNING)
            Partition start (4294967296) is beyond sector 4294967295 (2^32-1).
            Windows will not be able to boot from this file system.
        * check file system on /dev/loop0p2 for errors and if p... (SUCCESS)
    
    [1] NTFS, Partition Boot Sector (PBS)
        "
        Byte     Field     Field name       Purpose
        offset   length
        0x1C     5 bytes   Hidden Sectors   The number of sectors preceding
                                            the partition.
        "
        https://en.wikipedia.org/wiki/NTFS#Partition_Boot_Sector_(PBS)
    
    [2] std::string::insert
        "fill (5)  string& insert(size_t pos, size_t n, char c);
    
        Insert into string
        Inserts additional characters into the string right before the
        character indicated by pos (or p):
    
        (5) fill
            Insert n consecutive copies of character c.
        "
        https://cplusplus.com/reference/string/string/insert/
    
    Closes #164 - GParted crashes copying NTFS partition to starting beyond
                  2TiB

2022-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove mention of devkit-disks from README
    
    Missed at the time by commit:
        ddb334705efa4c340c33b64ce8e5eefada3deb31
        Remove support for obsolete devkit-disks automount inhibitor

2022-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update README for intltool to gettext migration (!107)
    
    Remove mention of intltool as it's now unused.
    
    Add polkit to the list of dependencies to build GParted from source as
    gettext always explicitly translates the org.gnome.gparted.policy file.
    
    Add polkit-devel and gettext-devel packages to the packages needing
    installing on various distributions to get the gettext translation rules
    for .policy files and the autopoint build tool installed.
    (Distributions such as Debian and Ubuntu split the packages differently.
    Gettext translation rules for .policy files are in the base policykit-1
    package and the autopoint tool is in the autopoint package which I
    assume is always installed as part of the development tool set.  Hence
    no change to the command to install dependent packages on these
    distributions.  See the earlier commit messages for more details).
    
    Closes !107 - Migrate from intltool to gettext translation

2022-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update .gitignore for intltool to gettext translation migration (!107)
    
    Remove no longer needed intltool related ignores.  Add extra ignores
    for direct use of gettext for translation.
    
    ABOUT-NLS and most of the po/* files are copied during autogen.
    autogen.sh -> gnome-autogen.sh -> autoreconf -> autopoint extracts these
    from gettext's archive of application support files
    /usr/share/gettext/archive.*.  Looks like this:
        $ ./autogen.sh
        ...
        Processing ./configure.ac
        Running autoreconf...
        autoreconf: Entering directory `.'
        autoreconf: running: autopoint --force
        Copying file ABOUT-NLS
        ...
        Copying file po/Makefile.in.in
        Copying file po/Makevars.template
        Copying file po/Rules-quot
        Copying file po/boldquot.sed
        Copying file po/en@boldquot.header
        Copying file po/en@quot.header
        Copying file po/insert-header.sin
        Copying file po/quot.sed
        Copying file po/remove-potcdate.sin
    
    And these files are created by make in the po directory:
        po/gparted.pot
        po/remove-potcdate.sed
    
    Closes !107 - Migrate from intltool to gettext translation

2022-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Revert workaround for .intltool-merge-cache.lock file being left behind (!107)
    
    Now that intltool is no longer used, the workaround for it leaving file
    .intltool-merge-cache.lock behind is no longer needed.  Therefore revert
    merge !103 "Fix make distcheck failure found in GitLab CI job
    unbuntu_test".  This commit reverts both of these earlier commits in one
    go:
    
        053691378c6cc3d153dc32b4d75da50f901e0062
        Resolve messages from configure in VPATH build (!103)
    
        0bd636a34b945469d8644464518f78b9f9e1e92d
        Fix up intltool leaving .intltool-merge-cache.lock file behind (!103)
    
    Closes !107 - Migrate from intltool to gettext translation

2022-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop installing intltool package into Alpine and CentOS CI images (!107)
    
    ... as the GParted build no longer uses it.  (Intltool is not explicitly
    installed into the Ubuntu CI image).
    
    However removing intltool from the GitLab CentOS Continuous Integration
    image causes the build job to fail like this:
        $ ./autogen.sh
        ...
        **Warning**: I am going to run `configure' with no arguments.
        If you wish to pass any to it, please specify them on the
        `./autogen.sh' command line.
        Processing ./configure.ac
        Running autoreconf...
        autoreconf: Entering directory `.'
        autoreconf: running: autopoint --force
        Can't exec "autopoint": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 345.
        autoreconf: failed to run autopoint: No such file or directory
        autoreconf: autopoint is needed because this package uses Gettext
    
    This is because on CentOS 7 autopoint is provided by the gettext-devel
    package which was installed as a requirement for intltool.  Fix the
    build by explicitly installing the package.
    
    (On Alpine Linux the gettext-dev package is automatically installed and
    on Ubuntu the autopoint package is automatically installed so those CI
    images don't need to explicitly include the relevant package).
    
    Closes !107 - Migrate from intltool to gettext translation

2022-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix .policy file translation failure in CentOS CI image (!107)
    
    Build in CentOS 7 CI job fails like this:
        $ make -j $nproc
        ...
        /usr/bin/msgfmt --desktop --template gparted.desktop.in -d ./po -o gparted.desktop
        /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
        /usr/bin/msgfmt: cannot locate ITS rules for org.gnome.gparted.policy.in
        make[2]: *** [org.gnome.gparted.policy] Error 1
        make[2]: *** Waiting for unfinished jobs....
        make[2]: Leaving directory `/builds/mfleetwo/gparted'
        make[1]: *** [all-recursive] Error 1
        make[1]: Leaving directory `/builds/mfleetwo/gparted'
        make: *** [all] Error 2
    
    As with Alpine Linux fixed in the previous commit, CentOS doesn't
    install the needed rules files by default.  Add polkit-devel package to
    CentOS CI image to fix this.
    
    Closes !107 - Migrate from intltool to gettext translation

2022-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix .policy file translation failure in Alpine Linux CI image (!107)
    
    In the Alpine Linux 3.16 CI build job, file org.gnome.gparted.policy is
    not translated with this warning:
        $ make -j $nproc
        ...
        /usr/bin/xgettext: warning: a fallback ITS rule file '/usr/share/gettext-0.21/its/metainfo.its' is used; it may not be in sync with the upstream
        /usr/bin/xgettext: warning: file 'org.gnome.gparted.policy.in.in' extension 'policy' is unknown; will try C
    
    In my Alpine Linux 3.15 VM building GParted fails like this:
        $ make
        ...
        make[2]: Entering directory '/home/alpine/programming/c/gparted'
        sed -e 's,[@]libexecdir[@],/usr/local/libexec,g' -e 's,[@]bindir[@],/usr/local/bin,g' -e 's,[@]gksuprog[@],pkexec --disable-internal-agent,g' -e 's,[@]enable_xhost_root[@],no,g' < ./org.gnome.gparted.policy.in.in > org.gnome.gparted.policy.in
        /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
        /usr/bin/msgfmt: cannot locate ITS rules for org.gnome.gparted.policy.in
        make[2]: *** [Makefile:1059: org.gnome.gparted.policy] Error 1
        make[2]: Leaving directory '/home/alpine/programming/c/gparted'
        make[1]: *** [Makefile:617: all-recursive] Error 1
        make[1]: Leaving directory '/home/alpine/programming/c/gparted'
        make: *** [Makefile:451: all] Error 2
    
    This is because gettext's msgfmt doesn't have rules for what elements to
    translate in .policy XML files.  Add polkit-dev package to Alpine Linux
    CI image to provide these files:
            /usr/share/gettext/its/policy.its
            /usr/share/gettext/its/policy.loc
    
    Now the .policy file is translated successfully:
        $ make
        ...
        make[2]: Entering directory '/home/alpine/programming/c/gparted'
        /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
        make[2]: Leaving directory '/home/alpine/programming/c/gparted'
    
    Closes !107 - Migrate from intltool to gettext translation

2022-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Install git into Alpine CI image to fix autopoint error (!107)
    
    Alpine Linux build CI job fails like this:
        $ ./autogen.sh
        ...
        Running autoreconf...
        autoreconf: export WARNINGS=no-portability
        autoreconf: Entering directory '.'
        autoreconf: running: autopoint --force
        autopoint: *** git program not found
        autopoint: *** Stop.
        autoreconf: error: autopoint failed with exit status: 1
    
    This is because gettext's autopoint command in Alpine Linux is built
    with a git archive of application support files:
        $ autopoint --version
        /usr/bin/autopoint (GNU gettext-tools) 0.21
        Uses a versions archive in git format.
        ...
        $ ls -l /usr/share/gettext/archive*
        -rw-r--r-- 1 root root 752320 Jan 14 2021 /usr/share/gettext/archive.git.tar.gz
    
    Where as for other distributions gettext's autopoint command uses plain
    compressed tar archive, for example in Ubuntu 22.04 LTS:
        $ autopoint --version
        /usr/bin/autopoint (GNU gettext-tools) 0.21
        Uses a versions archive in dirxz format.
        ...
        $ ls -l /usr/share/gettext/archive*
        -rw-r--r-- 1 root root 407064 Mar 25 10:31 /usr/share/gettext/archive.dir.tar.xz
    
    Fix by adding git to the packages installed into the Alpine Linux CI
    docker image.
    
    Closes !107 - Migrate from intltool to gettext translation

2022-08-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Migrate build from intltool to gettext translation (!107)
    
    [0] GNOME Goal: Gettext Migration
        https://wiki.gnome.org/Initiatives/GnomeGoals/GettextMigration
    
    This goal from 2016 is to migrate away from using intltool to help
    translate especially GNOME application related files, and instead use
    gettext directly now that gettext can handle a lot more file formats
    [1][2][3].
    
    The GNOME Goal: Gettext Migration [0] says:
        "With gettext 0.19.8, there is really no need anymore to use
        intltool or GLib's dated gettext glue (AM_GLIB_GNU_GETTEXT and
        glib-gettextize)."
    
    This version or later of gettext is available in the oldest supported
    distributions except for SLES 12:
        Distribution       EOL        gettext -V
        Debian 10          2022-Aug   0.19.8.1
        RHEL / CentOS 7    2024-Jun   0.19.8.1
        Ubuntu 18.04 LTS   2023-Apr   0.19.8.1
        SLES 12 SP5        2024-Oct   0.19.2 [4][5]
    As SLES 12 SP5 doesn't contain GParted and SLES 15 contains GParted
    0.31.0 [6] loosing the ability to compile future GParted 1.5 release on
    SLES 12 SP5 is acceptable.
    
    Additionally the use of intltool and the associated GLib provided macro
    AM_GLIB_GNU_GETTEXT was the source of the remaining warnings from
    autoconf 2.71 seen in Fedora 36 and Ubuntu 22.04 LTS about the use of
    obsolete macros:
        $ ./autogen.sh
        ...
        autoreconf: running: /usr/bin/autoconf --force
        configure.ac:59: warning: The macro `GLIB_GNU_GETTEXT' is obsolete.
        configure.ac:59: You should run autoupdate.
        aclocal.m4:426: GLIB_GNU_GETTEXT is expanded from...
    >>  aclocal.m4:526: AM_GLIB_GNU_GETTEXT is expanded from...
    >>  configure.ac:59: the top level
        configure.ac:59: warning: The macro `AC_TRY_LINK' is obsolete.
        configure.ac:59: You should run autoupdate.
        ./lib/autoconf/general.m4:2920: AC_TRY_LINK is expanded from...
        lib/m4sugar/m4sh.m4:692: _AS_IF_ELSE is expanded from...
        lib/m4sugar/m4sh.m4:699: AS_IF is expanded from...
        ./lib/autoconf/general.m4:2249: AC_CACHE_VAL is expanded from...
        ./lib/autoconf/general.m4:2270: AC_CACHE_CHECK is expanded from...
        aclocal.m4:111: GLIB_LC_MESSAGES is expanded from...
        aclocal.m4:426: GLIB_GNU_GETTEXT is expanded from...
    >>  aclocal.m4:526: AM_GLIB_GNU_GETTEXT is expanded from...
    >>  configure.ac:59: the top level
        configure.ac:59: warning: The macro `AC_TRY_LINK' is obsolete.
        configure.ac:59: You should run autoupdate.
        ...
    
    Note that use of AM_GLIB_GNU_GETTEXT was deprecated in GLib 2.47.5
    released 2016-01-18 [7].  Newer versions of GLib are included in the
    oldest supported distributions:
    
        Distro             Package containing   Version
                           glib-gettext.m4
        Debian 10          libglib2.0-dev-bin   2.58.3
        RHEL / CentOS 7    glib2-devel          2.56.1
        Ubuntu 18.04 LTS   libglib2.0-dev-bin   2.56.4
        SLES 12 SP5        glib2-devel          2.48.2
    
    Therefore perform the migration described in the GNOME wiki documents
    [0][1].  This involves:
    1. Replacing the macros used in configure.ac;
    2. Copying Makevars.template to po/Makevars and setting
       PO_DEPENDS_ON_POT and DIST_DEPENDS_ON_UPDATE_PO to "no";
    3. Replace @INTLTOOL_*@ macros in Makefile.am with rules to use gettext
       to directly translate the relevent GNOME application files;
    4. Removing (_) underscore marking translation prefixes from XML tags in
       GNOME application files as gettext understands which tags of which
       files need translating.
    For reference are these commits in projects GNOME-System-Monitor [8],
    Reversi [9] and Evince [10] making the same transition.
    
    At this point "./autogen.sh && make" succeeds, at least on Ubuntu which
    provides the instructions gettext needs to correctly translate .policy
    files by default.  These:
        /usr/share/gettext/its/polkit.its
        /usr/share/gettext/its/polkit.loc
    are included in the base policykit-1 package.
    
    [1]  Migrating from Intltool to Gettext
         https://wiki.gnome.org/MigratingFromIntltoolToGettext
    [2]  Using Modern Gettext
         https://blogs.gnome.org/mclasen/2016/07/21/using-modern-gettext/
    [3]  On the killing of intltool
         https://blogs.gnome.org/mcatanzaro/2016/07/27/on-the-killing-of-intltool/
    [4]  SUSE package search, SLES 12 SP5, gettext
         https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=12.5&arch=x86_64&query=gettext&module=
    [5]  SUSE Long Term Service Pack Support
         https://links.imagerelay.com/cdn/3404/ql/f3a083e9bcd34c76addd096d7f60ec00/long_term_service_pack_support_flyer.pdf
    [6]  SUSE package search, SLES 15, gparted
         https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=15&arch=x86_64&query=gparted&module=
    [7]  Deprecate GLIB_GNU_GETTEXT macro, use upstream gettext instead
         https://gitlab.gnome.org/GNOME/glib/-/commit/6b577196eed0754d2805fd48caa64f58f9bb8ee4
    [8]  [GNOME-System-Monitor] Migrate from intltool
         https://gitlab.gnome.org/GNOME/gnome-system-monitor/-/commit/9185b9c713980391a6f1a2377eb5ea249a0df182
    [9]  [Reversi] Gettext migration (bgo#793040)
         https://gitlab.gnome.org/GNOME/iagno/-/commit/d22f560ac80d0ded2cb3a38cb10a65e17ead3850
    [10] [Evince] build: Migrate from Intltool to Gettext
         https://gitlab.gnome.org/GNOME/evince/-/commit/4fd682132430feb8c012e4b0aa0c2c5da5ffe5ac
    
    Closes !107 - Migrate from intltool to gettext translation

2022-10-09  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2022-09-22  Matej Urbančič <mateju@src.gnome.org>

    Update Slovenian translation

2022-09-20  Alan Mortensen <alanmortensen.am@gmail.com>

    Update Danish translation

2022-09-17  Irénée THIRION <irenee.thirion@e.email>

    Update French translation

2022-09-14  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2022-09-13  Luna Jernberg <droidbittin@gmail.com>

    Update Swedish translation

2022-06-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update AC_PROG_LIBTOOL to LT_INIT in configure.ac (!106)
    
    Autoconf 2.71 on Fedora 36 and Ubuntu 22.04 LTS has started reporting
    a number of warnings about configure.ac containing obsolete macros.  One
    of them is this:
        $ ./autogen.sh
        ...
        Processing ./configure.ac
        configure.ac:17: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
        configure.ac:17: You should run autoupdate.
        m4/libtool.m4:99: AC_PROG_LIBTOOL is expanded from...
        configure.ac:17: the top level
        ...
    
    AC_PROG_LIBTOOL is deprecated and the replacement is LT_INIT [1].
    LT_INIT is available in all supported distributions, for example RHEL /
    CentOS 7 has libtool 2.4.2 with LT_INIT defined in
    /usr/share/aclocal/libtool.m4 serial 57.  The last known distribution
    without LT_INIT was RHEL / CentOS 5 [2].
    
    Update accordingly.
    
    [1] Libtool Manual, 5.4.1 The LT_INIT macro
        https://www.gnu.org/software/libtool/manual/html_node/LT_005fINIT.html
        "Macro: LT_INIT(options)
        ...  AC_PROG_LIBTOOL and AM_PROG_LIBTOOL are deprecated names for
        older versions of this macro; autoupdate will upgrade your
        configure.ac files."
    [2] 654cdc7335beda48f0da095a1d06e91870d9ac76
        Update AM_PROG_LIBTOOL to AC_PROG_LIBTOOL in configure.ac (#734718)
    
    Closes !106 - Update AC_PROG_LIBTOOL to LT_INIT in configure.ac

2022-09-11  Yosef Or Boczko <yoseforb@gnome.org>

    Update Hebrew translation

2022-09-08  Muhammet Kara <muhammetk@gmail.com>

    Update Turkish translation

2022-09-03  Sabri Ünal <libreajans@gmail.com>

    Update Turkish translation

2022-08-29  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2022-07-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use apt to install packages on Debian and related distros
    
    Apt is the modern recommended command to use when installing packages
    these days on Debian and related distributions [1][2][3].  Convert the
    Ubuntu GitLab CI jobs and update the README accordingly.
    
    [1] What is the difference between apt and apt-get?
        https://askubuntu.com/questions/445384/what-is-the-difference-between-apt-and-apt-get
    [2] Difference Between apt and apt-get Explained
        https://itsfoss.com/apt-vs-apt-get-difference/
    [2] Apt and Apt-get - Which One to Use
        https://linoxide.com/apt-and-apt-get-which-one-to-use/

2022-07-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Automate exclusion of loop device tests from CI image (!105)
    
    Avoid having to manually maintain the list of excluded File System tests
    in the GitLab Docker CI image.  Scan the unit test source extracting
    those tests marked with SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS()
    to automatically construct the setting for the GTEST_FILTER environment
    variable.
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow execution of more btrfs CI unit tests (!105)
    
    Now that reading btrfs usage, UUID and label can be performed on a file
    system image remove the need for a loop device for the relevant unit
    tests.
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use btrfs inspect-internal dump-super to read usage (!105)
    
    GParted has been using 'btrfs filesystem show' to report file system
    usage but that doesn't work on a file system image so doesn't work in a
    GitLab CI test job, as discussed earlier in this patchset.
    
    There is 'btrfs inspect-internal min-dev-size' but:
    1. That only works on a mounted file system and GParted isn't going to
       mount an unmounted file system just to query it's used space, so by
       extension won't work on image files.
    2. It reports a figure which is almost the same as the chunk usage of
       the device within the btrfs file system.  However if some files have
       been deleted leaving chunks partially used, then 'btrfs filesystem
       resize' will successfully shrink a btrfs smaller than the reported
       minimum device size.
    
    And there is also 'btrfs filesystem usage' but that also only works on a
    mounted file system.
    
    So instead use 'btrfs inspect-internal dump-super' to report some of the
    figures previously obtained from 'btrfs filesystem show'.  For example
    for a single device btrfs in an image file:
        $ truncate -s 256M /tmp/test.img
        $ mkfs.btrfs /tmp/test.img
        $ btrfs inspect-internal dump-super /tmp/test.img | egrep 'total_bytes|bytes_used|sectorsize|devid'
        total_bytes             268435456
        bytes_used              114688
        sectorsize              4096
        dev_item.total_bytes    268435456
        dev_item.bytes_used     92274688
        dev_item.devid          1
    
    Comparing with results from 'btrfs filesystem show' for the same file
    system, after adding a loop device to allow 'btrfs filesystem show' to
    succeed:
        $ su -
        # losetup --find --show /tmp/test.img
        # btrfs filesystem show --raw /dev/loop0
        Label: none  uuid: 32a1eb31-4691-41ae-9ede-c45d723655a3
                Total devices 1 FS bytes used 114688
                devid    1 size 268435456 used 92274688 path /dev/loop0
    
    This does bring a forced change in the calculation which affects multi-
    device btrfs file systems.  'btrfs filesystem show' provided chunk
    allocation information per device ("used" figure for each "devid").  The
    file system wide used bytes ("FS bytes used") was apportioned according
    to the fraction of the chunk allocation each device contained.  However
    'btrfs inspect-internal dump-super' doesn't provide chunk allocation
    information for all devices, only for the current device
    ("dev_item.bytes_used").  Instead the calculation now has to apportion
    the file system wide used bytes ("bytes_used") according to the fraction
    of the size of the current device ("dev_item.total_bytes") within the
    total size ("total_bytes").
    
    This can't make any difference to a single device btrfs file system as
    both fractions will be 1.  It only affects how the file system wide used
    bytes is distributed among multiple devices.
    
    As an example to see the difference between calculation methods, create
    a 2 GiB btrfs taking the defaults so getting duplicated metadata and
    single data.  Add another 2 GiB partition and populate with some files.
        # mkfs.btrfs /dev/sdb1
        btrfs-progs v4.15.1
        See http://btrfs.wiki.kernel.org for more information.
    
        Label:              (null)
        UUID:               68195e7e-c13f-4095-945f-675af4b1a451
        Node size:          16384
        Sector size:        4096
        Filesystem size:    2.00GiB
        Block group profiles:
          Data:             single            8.00MiB
          Metadata:         DUP             102.38MiB
          System:           DUP               8.00MiB
        SSD detected:       no
        Incompat features:  extref, skinny-metadata
        Number of devices:  1
        Devices:
           ID        SIZE  PATH
            1     2.00GiB  /dev/sdb1
    
        # mount /dev/sdb1 /mnt/1
        # btrfs device add /dev/sdc1 /mnt/1
        # cp -a /home/$USER/programming/c/gparted/ /mnt/1/
    
    Usage figures using the old calculation apportioning file system wide
    usage according to chunk allocation per device:
        # btrfs filesystem show --raw /dev/sdb1
        Label: none  uuid: 68195e7e-c13f-4095-945f-675af4b1a451
                Total devices 2 FS bytes used 178749440
                devid    1 size 2147483648 used 239861760 path /dev/sdb1
                devid    2 size 2147483648 used 436207616 path /dev/sdc1
    
        sum_devid_used = 239861760 + 436207616
                       = 676069376
    
        sdb1 usage = 178749440 * 239861760 / 676069376
                   = 63418277
        sdc1 usage = 178749440 * 436207616 / 676069376
                   = 115331163
    
    Usage figures using the new calculation apportioning file system wide
    usage according to device sizes:
        # btrfs inspect-internal dump-super /dev/sdb1 | egrep 'total_bytes|^bytes_used'
        total_bytes             4294967296
        bytes_used              178749440
        dev_item.total_bytes    2147483648
        # btrfs inspect-internal dump-super /dev/sdc1 | egrep 'total_bytes|^bytes_used'
        total_bytes             4294967296
        bytes_used              178749440
        dev_item.total_bytes    2147483648
    
        sdb1 usage = 178749440 * 2147483648 / 4294967296
                   = 89374720
        sdc1 usage = 178749440 * 2147483648 / 4294967296
                   = 89374720
    
    Both calculation methods ignore that btrfs allocates chunks at the
    volume manager level.  So when fully compacted the last chunk for
    metadata and data for each storage profile (RAID level) will be
    partially filled and this is not accounted for.
    
    Also for multi-device btrfs file systems the new calculation provides
    different results.  However given that shrinking a device in a multi-
    device btrfs file system can and does relocate extents to other devices
    (redundancy requirements of chunks permitting) it's minimum size is
    virtually impossible to calculate and may not restrict how small the
    btrfs device can be shrunk anyway.  If it turns out that this new
    calculation causes problems it's been made a separate commit from the
    previous commit for easier reverting.
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use btrfs filesystem show --raw to read usage (!105)
    
    'btrfs filesystem show' only used to report rounded human readable size
    figures.  Therefore the actual figure could have been anywhere within
    the rounding limit.  GParted also applied a heuristic to snap the file
    system size figure to the partition size if the partition size was
    within the rounding limit of the reported file system size [1].
    
    btrfs-progs v4.1 added the --raw option to print the figures in bytes
    [2][3][4].
        # btrfs filesystem show --raw /dev/sdb1
        Label: none  uuid: 003a619e-856f-4b9c-bd29-4d0ae0296d66
                Total devices 2 FS bytes used 178765824
                devid    1 size 2147483648 used 239861760 path /dev/sdb1
                devid    2 size 2147483648 used 436207616 path /dev/sdc1
    
    Since the oldest supported distributions now use btrfs-progs v4.5.3 and
    later (see the distribution End-of-Life table in the previous commit
    message), unconditionally use this to get accurate figures.
    
    [1] 7fc16a1b6905f7f2d6876d317c4757ff09cdd57c
        Handle btrfs tools rounding of figures (#499202)
    [2] btrfs-progs: Allow "filesystem show" command to handle different units
        https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=15379fa2257bf937cf7830c0b1b79f2daf5df72c
    [3] btrfs-progs: docs: new size options for fi show
        https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=81225f11d9ea58590476612e69211113ddb9b943
    [4] Btrfs progs release 4.1
        https://lore.kernel.org/linux-btrfs/20150622150023.GX6761@twin.jikos.cz/
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-07-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use btrfs inspect-internal dump-super to read UUID (!105)
    
    GParted so far uses 'btrfs filesystem show' to read the file system
    UUID.  But this doesn't work on a file system image so doesn't work in
    the GitLab CI test jobs, as discussed in the earlier commit "Use btrfs
    filesystem label to read the FS label (!105)".
        $ truncate -s 256M /tmp/test.img
        $ mkfs.btrfs /tmp/test.img
        ...
        UUID:               5ea62f88-fef3-4ece-a726-b88f3d81fe1c
        ...
        $ btrfs filesystem show /tmp/test.img
        ERROR: not a valid btrfs filesystem: /tmp/test.img
    
    Instead use 'btrfs inspect-internal dump-super' which works on image
    files too.
        $ btrfs inspect-internal dump-super /tmp/test.img
        ...
        fsid                    5ea62f88-fef3-4ece-a726-b88f3d81fe1c
        ...
    
    'btrfs inspect-internal dump-super' was added in btrfs-progs 4.5 [1][2]
    so is available in the oldest supported distributions and can be used
    unconditionally.
        Distro            EOL        btrfs --version
        Debian 10         2022-Jun   v4.20
        RHEL / CentOS 7   2024-Jun   v4.9.1
        Ubuntu 18.04 LTS  2023-Apr   v4.15.1
        SLES 12 SP5       2024-Oct   v4.5.3    [3][4]
    
    Unfortunately it returns 0 status on failure so use non-empty stderr to
    identify failure.
        $ rm /tmp/test.img
        $ truncate -s 256M /tmp/test.img
        $ btrfs inspect-internal dump-super /tmp/test.img 1> /dev/null
        ERROR: bad magic on superblock on /tmp/test.img at 65536
        $ echo $?
        0
    
    [1] btrfs-progs: introduce inspect-internal dump-super
        https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=eaa93e3b0295fc94c774ec73056559a6b8c78b42
    [2] Btrfs progs release 4.5
        https://lore.kernel.org/linux-btrfs/20160320235330.GG21722@suse.cz/
        "* new/moved commands
           * btrfs-show-super -> btrfs inspect-internal dump-super
        "
    [3] SUSE Long Term Service Pack Support
        https://links.imagerelay.com/cdn/3404/ql/f3a083e9bcd34c76addd096d7f60ec00/long_term_service_pack_support_flyer.pdf
    [4] SUSE package search
        https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=12.5&arch=x86_64&query=btrfsprogs&module=
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-08-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract repeated code into trim_trailing_new_line() (!105)
    
    Create function to replace repeated code which optionally removes
    trailing new line character from a string.
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-07-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use btrfs filesystem label to read the FS label (!105)
    
    Until now GParted has run 'btrfs filesystem show' to read the file
    system label.  This has a number of issues and limitations:
    1.  Doesn't work on a file system image so can't be unit tested in the
        GitLab CI test job where a loop device can't be created [1] or as a
        non-root user.
    2.  Reported failed exit status 1 when successfully showing a mounted
        btrfs, but only when using btrfs-progs v3.14 and 3.14.1 [2][3].
    3.  Failed to distinguish between label set to "none" and no label
        reported as none, but only when mounted and with btrfs-progs v3.12
        [3].
    
    As non-root user run btrfs read label unit test:
        $ tests/test_SupportedFileSystems --gtest_filter='*CreateAndReadLabel/btrfs'
        ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs
        test_SupportedFileSystem.cc:539: Skip test.  Not root to be able to create required loop device
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs (0 ms)
    
    Even as root, 'btrfs filesystem show' fails to work on an image file:
        # truncate -s 256M /tmp/test.img
        # mkfs.btrfs /tmp/test.img
        # btrfs filesystem show /tmp/test.img
        ERROR: not a valid btrfs filesystem: /tmp/test.img
        # echo $?
        1
        # rm /tmp/test.img
    
    Instead use 'btrfs filesystem label' to read the label.  It also works
    on an image file, the exit status is informative and output is just the
    label followed by a new line character [4] so very simple to parse.
    
    Error case:
        $ truncate -s 256M /tmp/test.img
        $ btrfs filesystem label /tmp/test.img
        No valid Btrfs found on /tmp/test.img
        $ echo $?
        255
    
    No label case:
        $ mkfs.btrfs /tmp/test.img
        $ btrfs filesystem label /tmp/test.img
    
        $ echo $?
        0
        $ btrfs filesystem label /tmp/test.img | hexdump -C
        00000000  0a                                                |.|
        00000001
    
    Label case:
        $ mkfs.btrfs -L 'label with
        > new line and trailing space ' /tmp/test.img
        $ btrfs filesystem label /tmp/test.img
        label with
        new line and trailing space
        $ echo $?
        0
        $ btrfs filesystem label /tmp/test.img | hexdump -C
        00000000  6c 61 62 65 6c 20 77 69  74 68 0a 6e 65 77 20 6c  |label with.new l|
        00000010  69 6e 65 20 61 6e 64 20  74 72 61 69 6c 69 6e 67  |ine and trailing|
        00000020  20 73 70 61 63 65 20 0a                           | space .|
        00000028
    
    Run 'btrfs filesystem label' always passing the block device as this
    works for both mounted and unmounted file systems.  This is in
    contrast to writing the label for a mounted btrfs where the mount
    mount must be used [5].
        # mkfs.btrfs -L 'test label' /dev/sdb1
        # btrfs filesystem label /dev/sdb1
        test label
        # mount /dev/sdb1 /mnt/1
        # btrfs filesystem label /dev/sdb1
        test label
    
    [1] 07ad43a1072a104543bfc45bc5d357f3d8f8d6f6
        Create loop devices for BTRFS read file system interface tests (!49)
    [2] 82c6265fa5599bd5acfe33abecaa99de150d71e9
        Update parsing of btrfs filesystem show for the UUID (#733601)
    [3] eca732fb0cefe35db76a7ac96145e2004e8eed08
        Update parsing of btrfs filesystem show for the label (#733601)
    [4] btrfs-progs v3.14, cmd_label() function
        https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/tree/cmds-filesystem.c?h=v3.14#n984
    [5] eb034b17597713bbc08dd3ab90444eaa2c0e7ff5
        Add labelling of mounted btrfs (#163)
    
    Closes !105 - Update used btrfs file system commands, new minimum is
                  btrfs-progs 4.5

2022-08-13  Goran Vidović <trebelnik2@gmail.com>

    Update Croatian translation

2022-06-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix typo in comment in xfs::write_label()

2022-07-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit testing of GParted exFAT interface to ubuntu_test CI job
    
    Now that the docker image for ubuntu:latest has updated to Ubuntu 22.04
    LTS [1] and exfatprogs is available [2] add the package to the CI job to
    include it in the testing.
    
    [1] Ubuntu Docker official image
        https://hub.docker.com/_/ubuntu/
        "Supported tags and respective Dockerfile links
        ...
        22.04, ..., latest, ...
        "
    [2] Ubuntu > Packages > jammy (22.04LTS) > otherosfs > exfatprogs
        https://packages.ubuntu.com/jammy/exfatprogs
    [3] 3783cb41732264b12b6ccd9cf6a9f36e1c2a4241
        Add unit testing of GParted exFAT interface (!30)

2022-06-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add clearing FS label to CreateAndWriteLabel unit test
    
    For FAT16/32 and XFS file systems clearing the label uses different
    command options and code path in file system specific ::write_label()
    method.  Therefore extend this unit test to also test clearing the
    label.

2022-07-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop clearing FAT16/32 label when setting a new UUID (!104)
    
    Now fix the error with GParted clearing the label when setting a new
    UUID on a FAT16/32 file system.  Reproduce the issue on the command
    line:
        # mkfs.fat -F 16 -v -I -n TEST_LABEL /dev/sdb1
        # mdir -f -i /dev/sdb1 ::/
         Volume in drive : is TEST_LABEL
         Volume Serial Number is 5D4C-6E6E
        ...
        # mlabel -n -i /dev/sdb1 ::
        # mdir -f -i /dev/sdb1 ::/
         Volume in drive : has no label
         Volume Serial Number is 77BB-A883
        ...
    
    This was broken by commit "Fix writing FAT16/32 FS UUID on Alpine Linux
    (!104)" earlier in this patchset, which included this comment:
        "...  Also drop the '-s' option
        as showing the current label is unrelated to writing a new UUID."
    
    It is not mentioned in the mlabel[1] manual page that option -s is
    needed in order to avoid clearing the label when assigning a new UUID.
    Anyway add the option back.
    
    [1] mlabel(1)
        https://linux.die.net/man/1/mlabel
        "s     Shows the existing label, without prompting the user.
        n      Assigns a new (random) serial number to the disk
        "
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-07-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add CreateAndWriteUUIDAndReadLabel unit test (!104)
    
    During review and testing of this patchset it was discovered that using
    GParted to set a new UUID on a FAT16 or FAT32 file system that there was
    a new unwanted side effect of clearing the label.
    
    Add unit test to cover this error scenario.  It does the following:
    1. Creates a file system with a known label;
    2. Writes a new UUID;
    3. Reads the label and confirms it matches the initial label.
    
    This new unit test captures the fault like this:
        $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteUUIDAndReadLabel*'
        ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat16
        test_SupportedFileSystems.cc:645: Failure
        Expected equality of these values:
          fs_label
            Which is: "TEST_LABEL"
          m_partition.get_filesystem_label().c_str()
            Which is: ""
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat16, where GetParam() = 13 (21 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat32
        test_SupportedFileSystems.cc:645: Failure
        Expected equality of these values:
          fs_label
            Which is: "TEST_LABEL"
          m_partition.get_filesystem_label().c_str()
            Which is: ""
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat32, where GetParam() = 14 (22 ms)
    
    Don't forget to exclude this unit test for file systems which need a
    loop device but which fails to be created inside the docker CI image.
    Reference:
        39fdfe51da4bddecb2c99a9b544b270130423e72
        Exclude unit tests needing losetup in Docker CI image (!59)
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix make distcheck in Alpine Linux CI test job (!104)
    
    The make distcheck step of the CI test job fails like this on Alpine
    Linux:
        $ make distcheck
        ...
        make[1]: Leaving directory '/home/alpine/programming/c/gparted'
        if test -d "gparted-1.4.0-git"; then find "gparted-1.4.0-git" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "gparted-1.4.0-git" || { sleep 5 && rm -rf "gparted-1.4.0-git"; }; else :; fi
        case 'gparted-1.4.0-git.tar.gz' in \
        *.tar.gz*) \
          eval GZIP= gzip --best -dc gparted-1.4.0-git.tar.gz | ${TAR-tar} xf - ;;\
        *.tar.bz2*) \
          bzip2 -dc gparted-1.4.0-git.tar.bz2 | ${TAR-tar} xf - ;;\
        *.tar.lz*) \
          lzip -dc gparted-1.4.0-git.tar.lz | ${TAR-tar} xf - ;;\
        *.tar.xz*) \
          xz -dc gparted-1.4.0-git.tar.xz | ${TAR-tar} xf - ;;\
        *.tar.Z*) \
          uncompress -c gparted-1.4.0-git.tar.Z | ${TAR-tar} xf - ;;\
        *.shar.gz*) \
          eval GZIP= gzip --best -dc gparted-1.4.0-git.shar.gz | unshar ;;\
        *.zip*) \
          unzip gparted-1.4.0-git.zip ;;\
        *.tar.zst*) \
          zstd -dc gparted-1.4.0-git.tar.zst | ${TAR-tar} xf - ;;\
        esac
        gzip: unrecognized option: best
        BusyBox v1.35.0 (2022-05-09 17:27:12 UTC) multi-call binary.
    
        Usage: gzip [-cfkdt123456789] [FILE]...
    
        Compress FILEs (or stdin)
    
                -1..9   Compression level
                -d      Decompress
                -c      Write to stdout
                -f      Force
                -k      Keep input files
                -t      Test integrity
        tar: short read
        make: *** [Makefile:844: distcheck] Error 1
    
    Busybox gzip is erroring because it doesn't make sense to request best
    compression when decompressing to stdout in this command:
        eval GZIP= gzip --best -dc gparted-1.4.0-git.tar.gz | ${TAR-tar} xf -
    
    Fix by installing the GNU gzip package into Alpine Linux test CI job docker
    image.
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix writing FAT16/32 FS UUID on Alpine Linux (!104)
    
    Unit test writing FAT16/32 file system UUIDs fails on Alpine Linux like
    this:
        $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteUUID/fat16'
        ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUID/fat16
        test_SupportedFileSystems.cc:616: Failure
        Value of: m_fs_object->write_uuid(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        mkfs.fat -F16 -v -I '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (SUCCESS)
        ...
        mlabel -s -n :: -i '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
    
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
    
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUID/fat16, where GetParam() = 13 (38 ms)
    
    Using GParted on Alpine Linux to perform the same action produces the
    same error in the operation results.  Reproduce this on the command
    line:
        # mkfs.fat -F 16 -v -I /dev/sdb1
        # mlabel -s -n :: -i /dev/sdb1
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
        # echo $?
        1
    
    Again fix the same way, by moving the non-option '::' drive
    specification to the end of the command line.  Also drop the '-s' option
    as showing the current label is unrelated to writing a new UUID.
        # mdir -f -i /dev/sdb1 ::/ | grep 'Volume Serial Number is'
         Volume Serial Number is B97E-59A3
        # mlabel -n -i /dev/sdb1 ::
        # echo $?
        0
        # mdir -f -i /dev/sdb1 ::/ | grep 'Volume Serial Number is'
         Volume Serial Number is 1552-96A6
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix reading FAT16/32 FS UUID on Alpine Linux (!104)
    
    Unit test reading FAT16/32 file system UUIDs fails on Alpine Linux like
    this:
        $ ./test_SupportedFileSystems --gtest_filter='*CreateAndReadUUID/fat16'
        ....
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16
        test_SupportedFileSystems.cc:581: Failure
        Expected: (m_partition.uuid.size()) >= (9U), actual: 0 vs 9
        test_SupportedFileSystems.cc:584: Failure
        Value of: m_partition.get_messages().empty()
          Actual: false
        Expected: true
        Partition messages:
        Drive '::' not supported
        Cannot initialize '::'
        Drive 'A:' not supported
        Cannot initialize 'A:'
        Drive 'A:' not supported
        Cannot initialize 'A:'
    
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16, where GetParam() = 13 (28 ms)
    
    This doesn't normally affect GParted because it uses blkid as first
    choice to read file system UUIDs, only using file system specific
    commands when blkid isn't available.  Reproduce this on the command
    line:
        # mkfs.fat -F 16 -v -I /dev/sdb1
        # mdir -f :: -i /dev/sdb1
        Drive '::' not supported
        Cannot initialize '::'
        Drive 'A:' not supported
        Cannot initialize 'A:'
        Drive 'A:' not supported
        Cannot initialize 'A:'
    
    Again, this is caused by having non-option '::' drive specification
    before all the options on the mdir command line, which isn't supported
    by the POSIX strict getopt(3) on Alpine Linux.  Apply the same fix of
    moving the non-option argument to the end.
        # mdir -f -i /dev/sdb1 ::/
         Volume is drive : has no label
         Volume Serial Number is 7DC9-BCD9
        Director for ::/
    
        No files
        # echo $?
        0
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor fat16::read_uuid() into if fail return early pattern (!104)
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix writing FAT16/32 FS labels on Alpine Linux (!104)
    
    Unit test writing FAT16/32 file system labels fails on Alpine Linux like
    this:
        $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteLabel/fat16'
        ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteLabel/fat16
        test_SupportedFileSystems.cc:601: Failure
        Value of: m_fs_object->write_label(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        mkfs.fat -F16 -v -I -n 'FIRST      ' '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (SUCCESS)
        ...
        mlabel ::'SECOND     ' -i '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
    
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
    
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteLabel/fat16, where GetParam() = 13 (29 ms)
    
    Using GParted on Alpine Linux to perform the same action produces the
    same error in the operation results.  Reproduce this on the command
    line:
        # mkfs.fat -F 16 -v -I -n FIRST /dev/sdb1
        # mlabel ::SECOND -i /dev/sdb1
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
        # echo $?
        1
    
    Again, this is because musl libc's getopt(3) is POSIX compliant and
    stops parsing options at '::', the first non-option argument.  Apply the
    same fix of moving the non-option argument to the end of the mlabel
    command line:
        # mlabel -i /dev/sdb1 ::SECOND
        # echo $?
        0
        # mlabel -s -i /dev/sdb1
         Volume label is SECOND
    
    And for the clearing label case:
        # mlabel -c -i /dev/sdb1 ::
        # echo $?
        0
        # mlabel -s -i /dev/sdb1
         Volume has no label
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix reading FAT16/32 FS labels on Alpine Linux (!104)
    
    Several of the FAT16/32 file system unit tests fail on Alpine Linux.  In
    this commit we are just looking at the failure to read the label.  The
    test fails like this:
        $ ./test_SupportedFileSystems --gtest_filter='*CreateAndReadLabel/fat16'
        ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/fat16
        test_SupportedFileSystems.cc:551: Failure
        Expected equality of these values:
          fs_label
            Which is: "TEST_LABEL"
          m_partition.get_filesystem_label().c_str()
            Which is: ""
        test_SupportedFileSystems.cc:554: Failure
        Value of: m_partition.get_messages().empty()
          Actual: false
        Expected: true
        Partition messages:
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
    
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/fat16, where GetParam() = 13 (21 ms)
    
    The same error can be seen by using GParted to display a FAT16 or FAT32
    file system on Alpine Linux.  The Partition Information dialog displays
    this warning:
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
    
    Reproduce this on the command line:
        # mkfs.fat -F 16 -v -I -n TEST_LABEL /dev/sdb1
        # mlabel -s :: -i /dev/sdb1
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
        # echo $?
        1
    
    The mlabel.c source [1] uses getopt(3) to parse the command line
    arguments.  musl libc's [2] getopt(3) must be strictly POSIX compliant
    [3][4] and stops reading options at the first non-option argument, '::'
    in this case.  Move the non-option argument to the end of the command
    line and it works:
        # mlabel -s -i /dev/sdb1 ::
         Volume label is TEST_LABEL
    
    Where as GNU Libc's getopt(3) [5] says that by default it reorders argv
    eventually moving all non-option arguments to the end, hence why this
    has worked on every Linux distribution using GNU Libc.  This can be
    broken on any Linux distribution using GNU Libc by enforcing strict
    POSIX behaviour from getopt(3).  For example on Fedora 36:
        # mkfs.fat -F 16 -v -I -n TEST_LABEL /dev/sdb1
        # export POSIXLY_CORRECT=1
        # mlabel -s :: -i /dev/sdb1
        Mtools version 4.0.39, dated April 10th, 2022
        Usage: mlabel [-vscVn] [-N serial] drive:
        # echo $?
        1
        # mlabel -s -i /dev/sdb1 ::
        Hidden (2048) does not match sectors (63)
         Volume label is TEST_LABEL
        # echo $?
        0
    
    Fix by moving the non-option (image file drive specification) '::' to
    the end of the mlabel command line.
    
    [1] Mtools
        https://www.gnu.org/software/mtools/
    [2] musl libc
        https://musl.libc.org/
        "musl is an implementation of the C standard library built on top of
        the Linux system call API, including interfaces defined in the base
        language standard, POSIX, and widely agreed-upon extensions.
        "
    [3] POSIX.1-2017, Functions, getopt
        https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html
    [4] getopt(3p)
        https://man7.org/linux/man-pages/man3/getopt.3p.html
    [5] getopt(3)
        https://www.man7.org/linux/man-pages/man3/getopt.3.html
        "By default, getopt() permutes the contents of argv as it scans, so
        that eventually all the nonoptions are at the end.  Two other
        scanning modes are also implemented.  If the first character of
        optstring is '+' or the environment variable POSIXLY_CORRECT is set,
        then option processing stops as soon as a nonoption argument is
        encountered.
        "
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor fat16::read_label() into if fail return early pattern (!104)
    
    Follows the "Return Early" design pattern making the code easier to
    understand without having to remember cases for elses or cascading ifs.
    Refactor before the following commit's fix so that capture of output on
    failure can be confirmed as still working.
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid using += shell variable concatenation in CI test jobs (!104)
    
    The test CI job on Alpine Linux fails like this:
        $ GTEST_FILTER+=':My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs'
        /bin/sh: eval: line 135: GTEST_FILTER+=:My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs: not found
    
    This is because the busybox ash shell in Alpine Linux doesn't support +=
    syntax for variable concatenation.  Use plain variable assignment
    instead.
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Alpine Linux CI test job (!104)
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Alpine Linux CI build job (!104)
    
    There have been a number of GParted build issues [1][2] recently on
    Alpine Linux because it uses musl libc [3] which is stricter to POSIX,
    rather than the GNU C Library (glibc) which has numerous enhancements.
    Glibc is used by most Linux distributions, including CentOS and Ubuntu
    already used in the GNOME Continuous Integration jobs.  So add a GParted
    build job on Alpine Linux to catch these issues in future.  Uses the
    docker image of the latest Alpine Linux release.
    
    [1] 3d4b1c1e7b33f229efd254fb0cc06660af627ea0
        Fix NULL == 0 assumption in call to ped_partition_flag_next() (!100)
    [2] 45c00927b72319f00855c7feaf4dcf109b3e4414
        Use POSIX basename() in BCache_Info.cc (!99)
    [3] musl libc
        https://musl.libc.org/
    
    Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                  with FAT16/32

2022-06-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Print kernel and OS details first in the GitLab CI jobs
    
    When the CentOS 7 CI jobs were failing on a subset of the job runners
    [1] during March to May 2022, the docker image would hang even before
    the packages were fully installed so cat /proc/version and cat
    /etc/os-release were never run.  Move them to the first thing done in
    the docker image.
    
    [1] Hanging of GitLab CI jobs on a subset of job runners
        https://discourse.gnome.org/t/hanging-of-gitlab-ci-jobs-on-a-subset-of-job-runners/9931

2022-06-27  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2022-06-24  Jürgen Benvenuti <gastornis@posteo.org>

    Update German translation

2022-06-24  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2022-06-23  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2022-06-13  Sergej A <asvmail.as@gmail.com>

    Update Russian translation

2022-06-12  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Update Serbian translation

2022-05-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Resolve messages from configure in VPATH build (!103)
    
    Even though this is fixed the execution of configure as part of make
    distcheck outputs this:
        checking whether po/Makefile.in.in deletes intltool cache lock file... /usr/bin/grep: po/Makefile.in.in: No such file or directory
        /usr/bin/sed: can't read po/Makefile.in.in: No such file or directory
        /usr/bin/grep: po/Makefile.in.in: No such file or directory
        no
    
    make distcheck [1] performs a VPATH build with a read-only srcdir and
    a separate writable build directory with files split between the two.
    The relevant layout looks like:
        ./gparted-1.4.0-git/configure
        ./gparted-1.4.0-git/po/Makefile.in.in
        ./gparted-1.4.0-git/_build/sub/
    
    And make distcheck runs configure like this:
        cd ./gparted-1.4.0-git/_build/sub
        ../../configure --srcdir=../..
    
    The file is ../../po/Makefile.in.in in this case, so not found by the
    existing check.  A simple investigation technique is to run make
    distcheck, kill it shortly after configure completes and examine the
    build tree.  Definitely before make distcheck completes successfully and
    deletes everything.
    
    Fix by using $srcdir prefix to access the file.  Also handle the case of
    po/Makefile.in.in not existing, although this doesn't now occur in the
    scenario fixed by this commit.  And only patch the file if it's
    writable, another case that doesn't occur in this scenario.
    
    Relevant output line from configure run by make distcheck now looks
    like:
        checking whether po/Makefile.in.in deletes intltool cache lock file... yes
    
    [1] GNU Automake, 14.4 Checking the Distribution
        https://www.gnu.org/software/automake/manual/html_node/Checking-the-Distribution.html
    
    Closes !103 - Fix make distcheck failure found in GitLab CI job
                  unbuntu_test

2022-05-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix up intltool leaving .intltool-merge-cache.lock file behind (!103)
    
    On Ubuntu 22.04 LTS make distcheck fails like this:
        $ make distcheck
        ...
        ERROR: files left in build directory after distclean:
        ./po/.intltool-merge-cache.lock
        make[1]: *** [Makefile:920: distcleancheck] Error 1
        make[1]: Leaving directory '/builds/GNOME/gparted/gparted-1.4.0-git/_build/sub'
        make: *** [Makefile:849: distcheck] Error 1
    
    This was picked up by the GitLab ubuntu_test CI job after the Ubuntu
    22.04 LTS release and the official Ubuntu docker image labelled latest
    was updated to match, circa April 2022.  This is a known issue with
    intltool >= 0.51.0-5.1 [1][2][3], first included in Ubuntu 22.04 LTS.
    
    The pending proposed fix is to also delete the left behind
    .intltool-merge-cache.lock along with the associated cache file itself
    in the intltool provided Makefile.in.in [4].
    
    Applying a fix to the GitLab ubuntu_test CI job does nothing for fixing
    it for us maintainers on our distributions.  po/Makefile.in.in is not
    part of the GParted git repository, instead it is copied from
    /usr/share/intltool/Makefile.in.in by ./autogen.sh -> gnome-autogen.sh
    -> intltoolize --force --copy --automake.  Add a configure check which
    patches po/Makefile.in.in as needed.  This will fix it for those
    building from git, and be a harmless check for those building from a tar
    release.  Configure output line looks like:
        checking whether po/Makefile.in.in deletes intltool cache lock file... fixed
    
    [1] Ubuntu bug 1712194 - Error when running make distcheck
        https://bugs.launchpad.net/intltool/+bug/1712194
    [2] Debian bug #991623 - intltool: make distcheck broken
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=991623
    [3] Arch Linux bug FS#67098 - [intltool] latest patch for race condition
        breaks some builds
        https://bugs.archlinux.org/task/67098
    [4] Remove cache lock file in mostlyclean
        https://code.launchpad.net/~danbnicholson/intltool/intltool/+merge/406321
    
    Closes !103 - Fix make distcheck failure found in GitLab CI job
                  unbuntu_test

2022-06-05  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2022-06-03  Nathan Follens <nfollens@gnome.org>

    Update Dutch translation

2022-06-01  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2022-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Constify string parameters to add_mountpoint_entry()
    
    add_mountpoint_entry() doesn't modify the passed strings so use
    pass-by-constant-reference.  This avoids pass-by-value and having to
    construct copies of the strings just to pass them to this method.

2022-05-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Always use directory mount point when resizing btrfs (#193)
    
    A user received the following error when attempting to resize a mounted
    btrfs file system on their NixOS distribution:
    
        Shrink /dev/nvme0n1p3 from 933.38 GiB to 894.32 GiB        (ERROR)
        + calibrate /dev/nvme0n1p3  00:00:00                       (SUCCESS)
        + btrfs filesystem resize 1:937759744K '/etc/machine-id'   (ERROR)
            ERROR: not a directory: /etc/machine-id
            ERROR: resize works on mounted filesystems and accepts only
            directories as argument. Passing file containing a btrfs image
            would resize the underlying filesystem instead of the image.
    
    In the partition table section of the gparted_details /dev/nvme0n1p3 was
    reported with these mount points:
        /etc/machine-id, /etc/NetworkManager/system-connections,
        /etc/ssh/ssh_host_ed25519_key, /etc/ssh/ssh_host_ed25519_key.pub,
        /etc/ssh/ssh_host_rsa_key, /etc/ssh/ssh_host_rsa_key.pub, /home,
        /nix, /nix/store, /state, /var
    
    The user had a common configuration of NixOS which boots with an empty
    tmpfs as root with a few bind mounted files and directories to provide
    the needed persistent data [1][2].
    
    Re-create an equivalent situation:
    1. Create a btrfs file system and mount it:
        # mkfs.btrfs /dev/sdb1
        # mkdir /mnt/store
        # mount /dev/sdb1 /mnt/store
    
    2. Bind mount a file from this file system else where in the hierarchy.
       The only criteria is that this mount point sorts before /mnt/store.
        # echo 'Test contents' > /mnt/store/test
        # touch /boot/test
        # mount --bind /mnt/store/test /boot/test
    
      The kernel reports these mount mounts:
        # grep sdb1 /proc/mounts
        /dev/sdb1 /mnt/store btrfs rw,seclabel,relatime,space_cache=v2,subvolid=5,subvol=/ 0 0
        /dev/sdb1 /boot/test btrfs rw,seclabel,relatime,space_cache=v2,subvolid=5,subvol=/ 0 0
    
    3. Use GParted to resize this mounted btrfs file system.  It fails with
       the above error.
    
    GParted read the mount points from /proc/mounts and sorted them.  (See
    the end of Mount_Info::load_cache() for the sorting).  When resizing the
    btrfs file system GParted just used the first sorted mount point.  This
    was the file /etc/machine-id for the user and file /boot/test in the
    re-creation, hence the error.
    
    Fix by selecting the first directory mount point to pass to the btrfs
    resize command.
    
    [1] NixOS tmpfs as root
        https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/
    [2] Erase your darlings
        https://grahamc.com/blog/erase-your-darlings
    
    Closes #193 - path used to resize btrfs needs to be a directory

2022-05-11  Zurab Kargareteli <zuraxt@gmail.com>

    Add Georgian translation

2022-04-10  Dominika Liberda <ja@sdomi.pl>

    Fix NULL == 0 assumption in call to ped_partition_flag_next() (!100)
    
    GParted fails to build on Alpine Linux Edge (development tree for the
    next release) like this:
    
        GParted_Core.cc: In constructor 'GParted::GParted_Core::GParted_Core()':
        GParted_Core.cc:75:64: error: invalid 'static_cast' from type 'std::nullptr_t' to type 'PedPartitionFlag'
           75 |     for ( PedPartitionFlag flag = ped_partition_flag_next( static_cast<PedPartitionFlag>( NULL ) ) ;
              |                                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    The code is failing to compile now because musl libc 1.2.3 has became
    more C++11 strict [1][2] by defining NULL [3] as nullptr [4] rather than
    as 0.  The parameter to ped_partition_flag_next() [5] should always have
    been numeral 0 cast to an enumeration and never the NULL pointer.
    
    Fixes this commit [6] from 2004-12-27 which changed the parameter from 0
    to NULL.
    
    [1] define NULL as nullptr when used in C++11 or later
        https://git.musl-libc.org/cgit/musl/commit?id=98e688a9da5e7b2925dda17a2d6820dddf1fb28
    [2] NULL vs nullptr (Why was it replaced?) [duplicate]
        https://stackoverflow.com/questions/20509734/null-vs-nullptr-why-was-it-replaced
    [3] C++ reference, NULL
        https://en.cppreference.com/w/cpp/types/NULL
    [4] C++ reference, nullptr
        https://en.cppreference.com/w/cpp/language/nullptr
    [5] libparted Documentation, ped_partition_flag_next()
        https://www.gnu.org/software/parted/api/group__PedPartition.html#g0ce9ce4247b320011bc8e9d957c8cdbb
    [6] Added cylsize to Device and made Operation contain a Device instead
        commit 174f0cff77c5799a713954a22b2c54306d03036c
    
    Closes !100 - Fix NULL == 0 assumption in call to
                  ped_partition_flag_next()

2022-04-08  Markus Volk <f_l_k@t-online.de>

    Use POSIX basename() in BCache_Info.cc (!99)
    
    Musl libc [1][2] doesn't implement the GNU variant of basename() [3][4],
    obtained via #include <string.h>.  Therefore GParted fails to build on
    such distributions:
    
       fdebug-prefix-map=TOPDIR/build/tmp/work/cortexa57-yoe-linux-musl/gparted/1.4.0-r0/recipe-sysroot-native=-fvisibility-inlines-hidden  -c -o ../../gparted-1.4.0/src/BCache_Info.cc:52:33:
    
        error: use of undeclared identifier 'basename'; did you mean 'g_basename'?
                return "/dev/" + Glib::ustring(basename(buf));
                                               ^~~~~~~~
                                               g_basename
    
    Fix by using the POSIX implementation of basename() [5] instead,
    obtained via #include <libgen.h>, which musl libc does implement [6].
    Note that the POSIX implementation of basename() is allowed to modify
    the string passed to it.  This is okay because
    BCache_Info::get_bcache_device() is using a modifiable local character
    buffer.
    
    [1] musl libc
        https://musl.libc.org/
    [2] Projects using musl
        https://wiki.musl-libc.org/projects-using-musl.html
    [3] The GNU C Library, 5.10 Finding Tokens in a String
        https://www.gnu.org/software/libc/manual/html_node/Finding-Tokens-in-a-String.html
    [4] basename(3) - Linux manual page
        https://man7.org/linux/man-pages/man3/basename.3.html
    [5] POSIX basename()
        https://pubs.opengroup.org/onlinepubs/009695399/functions/basename.html
    [6] musl source, basename.c
        http://git.musl-libc.org/cgit/musl/tree/src/misc/basename.c
    
    Closes !99 - Fix undeclared identifier 'basename' build failure with
                 musl libc

2022-04-07  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2022-03-31  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2022-03-28  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2022-03-28  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.4.0   ==========

2022-03-28  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2022-03-27  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>

    Update Latvian translation

2022-03-27  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2022-03-25  Alan Mortensen <alanmortensen.am@gmail.com>

    Update Danish translation

2022-03-23  Kjell Cato Heskjestad <cato@heskjestad.xyz>

    Update Norwegian Bokmål translation

2022-03-18  Marek Černocký <marek@manet.cz>

    Updated Czech help translation

2022-03-17  A S Alam <aalam@fedoraproject.org>

    Update Punjabi translation

2022-03-16  Milo Casagrande <milo@milo.name>

    Update Italian translation

2022-03-13  Goran Vidović <trebelnik2@gmail.com>

    Update Croatian translation

2022-03-13  Goran Vidović <trebelnik2@gmail.com>

    Update Croatian translation

2022-03-10  Asier Sarasua Garmendia <asiersarasua@ni.eus>

    Update Basque translation

2022-01-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disable unmount of busy jbds (#89)
    
    GParted automatically enables the Partition > Unmount action for busy
    partitions.  This is not going to be supported for jbds so disable it.
    
    Closes #89 - GParted doesn't recognise EXT4 fs journal partition

2022-01-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Suppress "Unable to find mount point" warning for jbds (#89)
    
    Closes #89 - GParted doesn't recognise EXT4 fs journal partition

2022-01-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report busy status of jbds (#89)
    
    Continuing from the state in the previous commit, create an ext4 file
    system using the previously created external journal and mount it.
        # mke2fs -t ext4 -J device=/dev/sdb1 -L test-ext4 /dev/sdb2
        # mount /dev/sdb2 /mnt/2
    
    Did some experimenting with trying to create a second file system using
    the same external journal which is already in use.
        # mke2fs -t ext4 -J device=/dev/sdb1 -L 2nd-test-ext4 /dev/sdb3
        ...
        /dev/sdb1 is apparently in use by the system; will not make a journal here!
        # exit $?
        1
    
    Examined the source code of mke2fs and found that it performs an
    exclusive read-only open of the named journal block device to check if
    it is in use by the system or not [1].  Use the same method in GParted.
    
    Not used alternative method would be to mark the jbd active when the
    ext3/4 file system using it is active, but that requires working out the
    linkage between them.  That can be done using either blkid or dumpe2fs
    output but that involves parsing more fields and caching more data so is
    much more code than just testing the block device busy status using the
    same method which mke2fs uses.
    
    Matching UUIDs via blkid output.
        # blkid /dev/sdb1 /dev/sdb2
        /dev/sdb1: LABEL="test-jbd" UUID="6e52858e-0479-432f-80a1-de42f9a4093e" TYPE="jbd"
        /dev/sdb2: LABEL="test-ext4" UUID="cea5c2cd-b21c-4abf-a497-8c073bb12300" EXT_JOURNAL="6e52858e-0479-432f-80a1-de42f9a4093e" TYPE="ext4"
    
    Matching UUIDs via dumpe2fs output.
        # dumpe2fs -h /dev/sdb1 | egrep 'Filesystem UUID|Journal users'
        dumpe2fs 1.46.3 (27-Jul-2021)
        Filesystem UUID:          6e52858e-0479-432f-80a1-de42f9a4093e
        Journal users:            cea5c2cd-b21c-4abf-a497-8c073bb12300
        # dumpe2fs -h /dev/sdb2 | egrep 'Filesystem UUID|Journal UUID'
        dumpe2fs 1.46.3 (27-Jul-2021)
        Filesystem UUID:          cea5c2cd-b21c-4abf-a497-8c073bb12300
        Journal UUID:             6e52858e-0479-432f-80a1-de42f9a4093e
    
    If GParted was going to show the journal to file system linkage in the
    UI then doing this would be needed.  However so far there has only been
    a single reported case of a GParted user using an external journal,
    therefore adding the code complexity for this feature is not currently
    justified.  The simple busy detection method used by mke2fs is all that
    is needed.
    
    [1] mke2fs source code
        https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/
        misc/mke2fs.c:main()
            check_mount(journal_device, force, _("journal"));
        misc/util.c:check_mount()
            ext2fs_check_if_mounted(device, &mount_flags);
        lib/ext2fs/ismounted.c:ext2fs_check_if_mounted()
            ext2fs_check_mount_point(file, mount_flags, NULL, 0);
        lib/ext2fs/ismounted.c:ext2fs_check_if_mounted()
            if (stat(device, &st_buf) == 0 &&
                ext2fsP_is_disk_device(st_buf.st_mode)) {
                    int fd = open(device, O_RDONLY | O_EXCL);
                    if (fd >= 0) {
                            /*
                             * The device is not busy so it's
                             * definitelly not mounted. No need to
                             * to perform any more checks.
                             */
                            close(fd);
                            *mount_flags = 0;
                            return 0;
                    } else if (errno == EBUSY) {
                            busy = 1;
                    }
            }
    
    Closes #89 - GParted doesn't recognise EXT4 fs journal partition

2022-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise jbd (journaling block device) (#89)
    
    A user reported that they were using an external journal with an ext4
    file system, but that GParted didn't recognise it.  (They had the jbd
    on an Intel Optane drive and the ext4 file system on an SSD).
    
    Create a jbd like this:
        # mke2fs -O journal_dev -L test-jbd /dev/sdb1
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="test-jbd" UUID="6e52858e-0479-432f-80a1-de42f9a4093e" TYPE="jbd"
    
    Add recognition of jbd.  Use Blue Shadow colour, the same as ext4,
    because jbd is primarily used by ext3/4 [1][2].  jbd is also used by
    ocfs2 [1][3] and lustre [4][5] clustered file systems, but they are very
    unlikely to encountered by GParted users.  Also xfs [6] and jfs [7] can
    have external journals so if recognition of them is ever added they will
    get the same colour as their respective file systems too.
    
    [1] Journaling block device
        https://en.wikipedia.org/wiki/Journaling_block_device
        "JBD is filesystem-independent. ext3, ext4 and OCFS2 are known to
        use JBD"
    [2] https://ext4.wiki.kernel.org/index.php/Frequently_Asked_Questions#What_are_the_key_differences_between_jbd_and_jbd2.3F
    [3] OCFS2: The Oracle Clustered File System, Version 2
        https://www.kernel.org/doc/ols/2006/ols2006v1-pages-289-302.pdf
        "Metadata journaling is done on a per node basis with JBD"
    [4] Efficient Object Storage Journaling in a Distributed Parallel File
        System
        https://www.usenix.org/legacy/event/fast10/tech/full_papers/oral.pdf
    [5] Lustre Software Release 2.x Operations Manual
        https://doc.lustre.org/lustre_manual.pdf
        6.4.2. Choosing Parameters for an External Journal
    [6] mkfs.xfs(8) - construct an XFS filesystem
        https://man7.org/linux/man-pages/man8/mkfs.xfs.8.html
        "OPTIONS
        ...
        logdev=device
            This is used to specify that the log section should reside on
            the device separate from the data section.  The internal=1 and
            logdev options are mutually exclusive.
        "
    [7] jfs_mkfs(8) - create a JFS formatted partition
        https://manpages.debian.org/testing/jfsutils/jfs_mkfs.8.en.html
        "OPTIONS
        ...
        -j journal_device
            Create the external JFS journal on journal_device, ...
        "
    
    Closes #89 - GParted doesn't recognise EXT4 fs journal partition

2022-03-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix translation of DocBook markup tag of the GParted Manual (!98)
    
    As found by the GitLab Continuous Integration job on CentOS 7 with
    itstool 2.0.2, building the GParted Manual breaks on the Russian
    translation like this:
        $ ./autogen.sh
        $ make clean
        $ cd help
        $ make
        ...
        if ! test -d "ru/"; then mkdir "ru/"; fi
        if test -d "C"; then d="../"; else d="/home/mike/programming/c/gparted/help/"; fi; \
        mo="ru/ru.mo"; \
        if test -f "${mo}"; then mo="../${mo}"; else mo="/home/mike/programming/c/gparted/help/${mo}"; fi; \
        (cd "ru/" && itstool -m "${mo}" ${d}/C/index.docbook) && \
        touch "ru/ru.stamp"
        Error: Could not merge translations:
        'NoneType' object has no attribute 'node'
        make: *** [ru/ru.stamp] Error 1
    
    On Fedora 35 with itstool 2.0.6 building the GParted Manual merely
    reports a warning, leaving one paragraph untranslated, but the build
    completes successfully:
        $ ./autogen.sh
        $ make clean
        $ cd help
        $ make
        ...
        if ! test -d "ru/"; then mkdir "ru/"; fi
        if test -d "C"; then d="../"; else d="/home/fedora/programming/c/gparted/help/"; fi; \
        mo="ru/ru.mo"; \
        if test -f "${mo}"; then mo="../${mo}"; else mo="/home/fedora/programming/c/gparted/help/${mo}"; fi; \
        (cd "ru/" && itstool -m "${mo}" ${d}/C/index.docbook) && \
        touch "ru/ru.stamp"
        Warning: Could not merge translation for msgid:
        Set the <application>grub</application> root device by specifying the device returned by the <command>find</command> command. This should be the partition containing the boot directory. <_:screen-1/>
        ...
        $ echo $?
        0
    
    Fix translation of DocBook markup tag in the Russian translation of the
    GParted Manual by commit:
        17f4c3176d3be29d2867c080c0b292643d470627
        Update Russian translation
    
    Closes !98 - Fix translation of DocBook markup tag of the GParted Manual

2022-01-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove support for old volatile udev rules below /dev/.udev
    
    Udev stopped supporting volatile udev rules in /dev/.udev/rules.d in
    udev 176, released 2012-01-11 [1].  The oldest supported distributions
    use much more recent combined systemd and udev releases.
    
        Distro            EOL        udevadm -V
        Debian 9          2022-Jun   232
        RHEL / CentOS 7   2024-Jun   219
        Ubuntu 18.04 LTS  2023-Apr   237
    
    Now udev only reads volatile rules from /run/udev/ruled.d [2].  Simplify
    the code a little.
    
    [1] udev 176 NEWS
        https://git.kernel.org/pub/scm/linux/hotplug/udev.git/tree/NEWS?h=176
        "A writable /run directory (ususally tmpfs) is required now for a
        fully functional udev, there is no longer a fallback to /dev/.udev."
    [2] man 7 udev
        "RULES FILES
        The udev rules are read from the files located in the system rules
        directory /usr/lib/udev/rules.d, the volatile runtime directory
        /run/udev/rules.d and the local administration directory
        /etc/udev/rules.d."

2022-01-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent GParted probe starting stopped bcache (#183)
    
    From the setup in the previous commit, unregister (stop) all of the
    bcache backing and cache devices.
        # bcache unregister /dev/sdb2
        # bcache unregister /dev/sdb1
        # bcache unregister /dev/sdc1
        # bcache show
        Name        Type        State            Bname       AttachToDev
        /dev/sdb2   1 (data)    inactive         Non-Exist   Alone
        /dev/sdb1   1 (data)    inactive         Non-Exist   Alone
        /dev/sdc1   3 (cache)   inactive         N/A         N/A
    
    Run GParted.  Just the device scanning causes the stopped bcache devices
    to be restarted.
        # bcache show
        Name        Type        State            Bname       AttachToDev
        /dev/sdb2   1 (data)    clean(running)   bcache1     /dev/sdc1
        /dev/sdb1   1 (data)    clean(running)   bcache0     /dev/sdc1
        /dev/sdc1   3 (cache)   active           N/A         N/A
    
    This is nothing new with this patchset, but as a result of existing udev
    behaviour.  The chain of events goes like this:
    
    1. GParted calls ped_device_get() on each whole device;
    2. Libparted opens each partition read-write to flush the cache;
    3. When each is closed the kernel emits a block change event;
    4. Udev fires block rules to detect the possibly changed content;
    5. Udev fires bcache register (AKA start) rule.
    
    More details with the help of udevadm monitor, strace and syslog:
        GParted  | set_devices_thread()
        GParted  |   ped_device_get("/dev/sdb")
        Libparted|     ...
        Libparted|     openat(AT_FDCWD, "/dev/sdb1", O_WRONLY) = 9
        Libparted|     ioctl(9, BLKFLSBUF)        = 0
        Libparted|     close(9)
        KERNEL   | change   /devices/.../block/sdb/sdb1 (block)
        KERNEL   | add      /devices/virtual/bdi/250:0 (bdi)
        KERNEL   | add      /devices/virtual/block/bcache0 (block)
        KERNEL   | change   /devices/virtual/block/bcache0 (block)
        UDEV     | change   /devices/.../block/sdb/sdb1 (block)
        UDEV     | add      /devices/virtual/bdi/250:0 (bdi)
        UDEV     | add      /devices/virtual/block/bcache0 (block)
        UDEV     | change   /devices/virtual/block/bcache0 (block)
        SYSLOG   | kernel: bcache: register_bdev() registered backing device sdb1
    
        # grep bcache-register /lib/udev/rules.d/69-bcache.rules
        RUN+="bcache-register $tempnode"
    
    Fix this by temporarily adding a blank udev override rule to suppress
    automatic starting of bcache devices, just as was previously done for
    Linux Software RAID arrays [1].
    
    [1] a255abf3432ad106fac9c766f0816ada20be8e42
        Prevent GParted starting stopped Linux Software RAID arrays (#709640)
    
    Closes #183 - Basic support for bcache

2022-01-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Show bcache device as mount point of registered backing device (#183)
    
    A bcache device provides accelerated access to a backing device in a one
    to one relationship.  Multiple bcache backing devices can be attached to
    and accelerated by the same cache device.  Extending the setup from the
    previous commit, create an additional backing device and attach it to
    the same cache.
        # bcache make -B /dev/sdb2
        # bcache attach /dev/sdc1 /dev/sdb2
        # bcache show
        Name        Type        State            Bname     AttachToDev
        /dev/sdb2   1 (data)    clean(running)   bcache1   /dev/sdc1
        /dev/sdb1   1 (data)    clean(running)   bcache0   /dev/sdc1
        /dev/sdc1   3 (cache)   active           N/A       N/A
    
    List a couple of bcache specific sysfs files which identify registered
    (active) bcache devices (components).
        # ls -l /sys/block/sd?/sd??/bcache/{dev,set}
        lrwxrwxrwx. 1 root root 0 Jan  7 10:08 /sys/block/sdb/sdb1/bcache/dev -> ../../../../../../../../../../virtual/block/bcache0
        lrwxrwxrwx. 1 root root 0 Jan  7 11:53 /sys/block/sdb/sdb2/bcache/dev -> ../../../../../../../../../../virtual/block/bcache1
        lrwxrwxrwx. 1 root root 0 Jan  7 11:53 /sys/block/sdc/sdc1/bcache/set -> ../../../../../../../../../../../fs/bcache/9945e165-0604-4f29-94bd-b155d01080ad
    
    As was done with previous software block devices [1][2][3][4] show the
    bcache (access) device as the mount point of a backing device
    (component).  Use the /sys/block/DEV[/PTN]/bcache/dev sysfs symlinks to
    provide the bcache device names.  Bcache cache devices (components)
    don't get mount points because they aren't accessible.
    
    [1] commit 8083f11d84dbd4f186271a3cdbf5170db259f8b8
        Display LVM2 VGNAME as the PV's mount point (#160787)
    [2] commit f6c2f00df7858a7f4b97e699b9bcf1023bba850a
        Populate member mount point with SWRaid array device (#756829)
    [3] commit 538c866d099bc1f2bab3a41dc13a00b3d4336bbf
        Display array device as mount point of mdadm started ATARAID members
        (#75)
    [4] commit 538c866d099bc1f2bab3a41dc13a00b3d4336bbf
        Display array device as mount point of mdadm started ATARAID members
        (#75)
    
    Closes #183 - Basic support for bcache

2022-01-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disable unmount of busy bcache devices (#183)
    
    GParted automatically enables the Partition > Unmount action for busy
    partitions.  Unregister (deactivate) bcache devices is not going to be
    supported so disable it.
    
    Closes #183 - Basic support for bcache

2022-01-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report busy status of bcache (#183)
    
    Make (format as) bcache backing device (-B) and cache device (-C) and
    implicitly attach the backing device to the cache to enable caching, all
    in one.
        # bcache make -B /dev/sdb1 -C /dev/sdc1
        # bcache show
        Name        Type        State            Bname     AttachToDev
        /dev/sdb1   1 (data)    clean(running)   bcache0   /dev/sdc1
        /dev/sdc1   3 (cache)   active           N/A       N/A
    
    After experimenting with 'bcache unregister', 'bcache register' and
    stracing 'bcache show' the bcache kernel module creates the sysfs
    directory /sys/block/DEV[/PTN]/bcache and it's contents only when the
    bcache device is registered with the kernel (bcache component is
    active).  Use this to identify whether any bcache device (component)
    should be displayed as active or not in GParted.
        # ls -ld /sys/block/sd?/sd?1/bcache
        drwxr-xr-x. 6 root root 0 Jan  7 10:08 /sys/block/sdb/sdb1/bcache
        drwxr-xr-x. 2 root root 0 Jan  7 10:08 /sys/block/sdc/sdc1/bcache
    
    Closes #183 - Basic support for bcache

2022-01-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also pass device_path into GParted_Core::is_busy() (#183)
    
    Will use this extra parameter when determining if a device or partition
    containing bcache is busy or not.
    
    Closes #183 - Basic support for bcache

2022-01-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable GParted to present bcache devices (#183)
    
    Add pattern to recognise block cache devices as valid devices for
    GParted to work with.  Devices are named by the Linux kernel device
    driver like /dev/bcache0 [1] with partitions named like /dev/bcache0p1
    [2].
    
    Note bcache devices can be partitioned but all the documents I have seen
    guide users to create file systems directly in a bcache device and not
    partition it [3][4] (plus all other Internet search results I looked
    at).  This might be because bcache is a specialist use case and the
    bcache backing device can be a partition itself.
    
    [1] linux 5.15 drivers/md/bcache/super.c bcache_device_init()
        https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/md/bcache/super.c?h=v5.15#n945
    [2] Contents of /proc/partitions for a bcache partitioned backing device
        $ grep bcache /proc/partitions
         251        0  524280 bcache0
         251        1  523256 bcache0p1
    [3] Linux kernel document: A block layer cache (bcache)
        https://www.kernel.org/doc/Documentation/bcache.txt
    [4] The Linux kernel user's and administrator's guide > A block layer
        cache (bcache)
        https://www.kernel.org/doc/html/latest/admin-guide/bcache.html
    
    Closes #183 - Basic support for bcache

2022-01-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add detection of bcache (#183)
    
    Use blkid to detect bcache formatted devices.  Requires blkid from
    util-linux >= 2.24 for detection of bcache devices [1].
    
    Use util-linux's FS images when testing GParted detection.
        # wget http://git.kernel.org/cgit/utils/util-linux/util-linux.git/plain/tests/ts/blkid/images-fs/bcache-B.img.xz
        # xzcat bcache-B.img.xz > /dev/sdb1
        # wget http://git.kernel.org/cgit/utils/util-linux/util-linux.git/plain/tests/ts/blkid/images-fs/bcache-C.img.xz
        # xzcat bcache-C.img.xz > /dev/sdc1
        # blkid /dev/sdb1 /dev/sdc1
        /dev/sdb1: UUID="8fb7f716-4c19-4517-bfbb-6f4a2becad60" TYPE="bcache" PARTUUID="f8f1485e-01"
        /dev/sdc1: UUID="7a343627-ac87-4bf0-b76f-46067cbc9b8c" TYPE="bcache" PARTUUID="f46e8c86-01"
    
    To tidy-up after testing GParted detection, stop the bcache device in
    case it was automatically started and wipe the signatures.  This is to
    prevent udev rules from automatically starting the bcache device on
    every subsequent reboot.
        # echo 1 > /sys/block/sdb/sdb1/bcache/stop
        # wipefs -a /dev/sdb1 /dev/sdc1
    
    Closes #183 - Basic support for bcache

2022-01-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use face skin colours exclusively for software block devices (#183)
    
    Currently the Face Skin colour range from the GNOME palette represent a
    mixture of file systems and software block devices:
        JFS          - Face Skin Medium
        LVM2_PV      - Face Skin Dark
        NILFS2       - Face Skin Shadow
        LINUX_SWRAID - Dark Brown
        ATARAID      - Dark Brown
    
    We are about to add recognition of bcache [1][2][3], another software
    block device.  Reorganise the colour assignments so that Face Skin
    colour range is exclusively used by types of software block devices and
    assign JFS and NILFS2 new colours.
        Face Skin Light  (#EFE0CD) -
        Face Skin Medium (#E0C39E) - BCACHE         [New assignment]
        Face Skin Dark   (#B39169) - LVM2_PV
        Face Skin Shadow (#826647) - LINUX_SWRAID   [New assignment]
        Brown Dark       (#5A4733) - ATARAID
    
    NILFS2 has flash friendly characteristics [4] so use Accent Red colours
    along with F2FS.
        Accent Red      (#DF421E) - F2FS
        Accent Red Dark (#990000) - NILFS2   [New assignment]
    
    Move JFS to a group with XFS and UFS.  The hue of the GNOME palette
    Accent Yellow Dark colour, as used by UFS, was more Orange compared to
    Accent Yellow and a bit too close to the Orange used by BTRFS.  So use
    the hue of the GNOME Accent Yellow and extend the range and assign like
    this.
        Accent Yellow             (#EED680) - XFS
        Accent Yellow Dark        (#D6B129) - JFS   [Updated hue.
                                                     New assignment]
        Accent Yellow Shadow      (#AA8F2C) - UFS   [New colour.
                                                     New assignment]
        Accent Yellow Dark Shadow (#826F2B) -       [New colour]
    
    [1] bcache
        https://bcache.evilpiepirate.org/
    [2] Linux kernel document: A block layer cache (bcache)
        https://www.kernel.org/doc/Documentation/bcache.txt
    [3] The Linux kernel user's and administrator's guide > A block layer
        cache (bcache)
        https://www.kernel.org/doc/html/latest/admin-guide/bcache.html
    [4] NILFS, Relative performance
        https://en.wikipedia.org/wiki/NILFS#Relative_performance
    
    Closes #183 - Basic support for bcache

2022-02-25  Sergej A <sw@atrus.ru>

    Update Russian translation

2021-10-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary Glib::ustring::compose() of constant string

2021-10-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Check copy destination instead of source (!95)(#723571)
    
    GParted currently performs these relevant steps for a copy operation:
    1.  Check source file system
    2.  Copy to destination
    3.  If destination partition is larger than source
    3.1.  check destination file system
    3.2.  grow destination file system
    
    Always checking the source was added by this commit:
        a54b52ea33abb1f5a44b52bcad5858ba41cd135d
        xfs copy now uses xfsdump and xfsrestore. icw some hacks in the other 2
        ...
        Also the source file system is now checked before the actual copy
        is performed.  If damaged beyond repair, the copy won't start.
    
    I think users have an expectation that a copy operation accesses the
    source read-only and performing a file system check on the source
    breaks that expectation.  Also uses may accidentally or deliberately try
    to copy a file system off a failing drive, where trying to check the
    source could lead to further data loss.  (ddrescue is the proper tool
    for recovering data from damaged drives but ddrescue is not a tool the
    user may know -- they know about GParted).
    
    For a failing drive, not checking the source first means the copy might
    fail instead, however a failed copy is preferable to greater chance of
    further damaging the source file system by checking it.
    
    In order to keep the new process as similar as possible to before,
    always check the destination instead.  This changes the copy operation
    from performing one or two file system checks to always performing only
    one check.  The new relevant copy operation steps are:
    1. Copy to destination
    2. check destination file system
    3. If destination partition is larger than source
    3.1.  grow destination file system
    
    This has exactly the same error handling as before, if the check of the
    destination file system fails the operation stops and any grow step
    won't be performed.  This represents the minimum change in behaviour
    from before.
    
    Bug 723571 - Copying ext4 partitions should not fix the source but the
                 destination
    Closes !95 - Check copy destination instead of source

2022-02-05  Luming Zh <lumingzh@qq.com>

    Update Chinese (China) translation

2021-11-23  Matej Urbančič <mateju@src.gnome.org>

    Update Slovenian translation

2021-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from SWRaid_Info::get_label() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return constant reference from SWRaid_Info::get_uuid() (!94)
    
    Since the only use of SWRaid_Info::get_uuid() assign the returned value
    this doesn't actually save any copy construction.  Do it for consistency
    with the other get_*() methods in SWRaid_Info.
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from SWRaid::get_array() (!94)
    
    Have to use a second constant reference variable array_path_2 in
    GParted_Core::set_mountpoints() because by design C++ does not implement
    rebinding of references [1].
    
    [1] why doesn't C++ allow rebinding a reference?
        https://stackoverflow.com/questions/27037744/why-doesnt-c-allow-rebinding-a-reference
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return constant reference from OperationDetail::get_treepath() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return constant reference from OperationDetail::get_description() (!94)
    
    All uses of get_description() copy construct to a local variable, not
    assign to a reference, so this doesn't save anything.  It is just being
    done to be consistent with making other getters return a constant
    reference.
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use constant reference from LVM2_PV_Info::get_vg_cache_entry_by_name() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from LVM2_PV_Info::get_vg_name() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use constant reference from LVM2_PV_Info::get_pv_cache_entry_by_name() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use constant reference from btrfs::get_cache_entry() (!94)
    
    Method already returned a constant reference.  Change local variables to
    constant references to avoid copy constructing them.
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-10-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from Partition::get_mountpoints() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from Partition::get_mountpoint() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from Partition::get_filesystem_label() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from Partition::get_path() (!94)
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return and use constant reference from Device::get_path() (!94)
    
    A number of GParted methods named get_*() are returning properties and
    are return-by-value.  For objects this implies the returned value is
    copy constructed and later destroyed when it goes out of scope.  Change
    them to use return-by-constant-reference to avoid unnecessary object
    duplication.  Just have to make sure the reference goes out of scope
    before the referenced object is destroyed to avoid having a reference
    (pointer) to freed memory.  Assigning to a local variable instead of
    of a local reference still duplicates the object so can be used when the
    lifetime of the gotten object needs to be longer that the referenced
    object.
    
    Previously done for other getters here:
        d948cbcb9143dc975dd3c66defd7289eb4113b2c
        Make get_custom_text() and get_generic_text() return by reference
    
    This change just makes Device::get_path() return a constant reference
    and updates uses to match to avoid copy constructing the returned value.
    
    Closes !94 - Make more getter methods use return-by-constant-reference

2021-11-14  Matej Urbančič <mateju@src.gnome.org>

    Update Slovenian translation

2021-11-05  Yaron Shahrabani <sh.yaron@gmail.com>

    Update Hebrew translation

2021-11-05  Yaron Shahrabani <sh.yaron@gmail.com>

    Update Hebrew translation

2021-10-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make MB_Needed_for_Boot_Record() a static member function
    
    Because it doesn't access any member variables or call any member
    methods.

2021-10-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify logic in MB_Needed_for_Boot_Record() et al
    
    The first two clauses say is the partition object type unallocated
    inside an extended partition, or a logical partition (which only occur
    inside an extended partition).  As these are the only two partition
    object types which can occur inside an extended partition, this is
    equivalent to saying is the partition object inside an extended
    partition.  Simplify.

2021-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use previous unallocated partition when determining 1 MiB reservation in resize/move dialog
    
    The create new and paste into new dialogs are both composing a new
    partition into the unallocated selected_partition they are passed.  The
    starting sector of this unallocated partition is the first sector the
    newly composed partition could possibly have.  To ensure it doesn't
    overlay with the partition table or EBR (Extended Boot Records) it calls
    MB_Needed_for_Boot_Record() to indicate if the first 1 MiB needs to be
    reserved in the dialog or not.
    
    Code:
        Dialog_Partition_New::set_data(..., selected_partition, ...)
            ...
            MIN_SPACE_BEFORE_MB = Dialog_Base_Partition::MB_Needed_for_Boot_Record(selected_partition);
    
        Dialog_Partition_Copy::set_data(selected_partition, ...)
            ...
            MIN_SPACE_BEFORE_MB = Dialog_Base_Partition::MB_Needed_for_Boot_Record(selected_partition);
    
    However the resize/move dialog is different.  It is passed the existing
    selected_partition object and the vector of partitions from which it
    determines if there is a previous unallocated partition object or not.
    When there is no previous unallocated partition object, there is no need
    to reserve 1 MiB because the selected_partition can't be moved further
    to the left.  In the other case when there is a previous unallocated
    partition object the start of the existing selected_partition can be
    moved to the left.  However the code passes the selected_partition
    object to MB_Needed_for_Boot_Record() so doesn't have the first sector
    the newly composed partition could possibly have so doesn't reserve the
    first 1 MiB to prevent it overlapping with the partition table at the
    start of the drive.  These two commits addressed this limitation:
    * Ensure 1 MiB reserved when moving extended partition to start of drive
    * Ensure 1 MiB reserved when moving partition to start of disk
    
    Code:
        Dialog_Partition_Resize_Move::set_data(selected_partition, ...)
            new_partition = selected_partition.clone();
            if (selected_partition.type == TYPE_EXTENDED)
                Resize_Move_Extended(...);
            else
                Resoze_Move_Normal(...);
    
        Dialog_Partition_Resize_Move::Resize_Move_Normal(...)
            ...
            if (previous <= 0)
                MIN_SPACE_BEFORE_MB = 0;
            else
            {
                if (START < MEBIBYTE / new_partition->sector_size)
                    MIN_SPACE_BEFORE_MB = 1;
                else
                    MIN_SPACE_BEFORE_MB = Dialog_Base_Partition::MB_Needed_for_Boot_Record(*new_partition);
            }
    
        Dialog_Partition_Resize_Move::Resize_Move_Extended(...)
            ...
            if (previous <= 0)
                MIN_SPACE_BEFORE_MB = 0;
            else
            {
                if (START < MEBIBYTE / new_partition->sector_size)
                    MIN_SPACE_BEFORE_MB = 1;
                else
                    MIN_SPACE_BEFORE_MB = Dialog_Base_Partition::MB_Needed_for_Boot_Record(*new_partition);
            }
    
    So instead pass the previous unallocated partition object as that
    contains the left most start sector the newly composed partition could
    possibly have, therefore the check for overlapping the partition table
    in the first 1 MiB of the drive can succeed.

2021-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure 1 MiB reserved when moving extended partition to start of drive
    
    On an MSDOS partitioned drive, create an extended partition at least 2
    MiBs from the start of the drive.  Like this:
        dd if=/dev/zero bs=1M of=dev/sdb
        echo 4096,4096,5 | sfdisk -uS --force /dev/sdb
    
    The resize/move dialog appears to allow the extended partition to be
    moved and/or resized to the very start of the drive, over the top of the
    partition table, without reserving the first 1 MiB.  Ensure the dialog
    reserves the first 1 MiB, like it does when moving normal partitions.
    
    Reference:
        ceab9bde57fafbc96f9d90d2a86713cd07126f8b
        Ensure 1 MiB reserved when moving partition to start of disk

2021-10-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow resize/move of partition to sector 2048 when following another (#172)
    
    This case is an extension of the setup in the previous commit.  Add a
    second partition several megabytes after the first.  It looks like this:
    
      [TABLE][PTN#1]                  [PTN#2]
      <-- 1st MiB -><- several MiBs ->
    
    Just need to make the gap 2 MiB or more so that it can be seen what the
    resize/move dialog is allowing.  Setup like this using an 8 MiB gap and
    8 MiB partition #2.
    
    For MSDOS use:
        dd if=/dev/zero bs=1M of=/dev/sdb
        (echo 1,2047; echo 18432,16384) | sfdisk -uS --force /dev/sdb
        mkswap /dev/sdb2
    
    For GPT use:
        sgdisk --zap-all /dev/sdb
        sgdisk --set-alignment=1 --new 1:34:2047 /dev/sdb
        sgdisk --new 2:18432:34815 /dev/sdb
        mkswap /dev/sdb2
    
    In GParted try to move partition sdb2 to the left as much as possible,
    or try to resize the start to the left as much as possible.  GParted
    insists on having a 1 MiB of padding before the start of sdb2, forcing
    it to start at sector 4096, even though sector 2048 is free and aligns
    to whole megabytes.
    
    Delete the preceding partition.  Now GParted allows sdb2 to be moved or
    resize to start at sector 2048.
    
    Fix another off by one error in the sector comparison for the
    resizing/moving of partitions.
    
    Closes #172 - GParted doesn't allow creation of a partition starting at
                  sector 2048 if there is a partition before it

2021-10-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow creation of partition at sector 2048 when following another (#172)
    
    [This commit message and test case is written assuming a drive with a
    (logical) sector size of 512 bytes.  GParted equally well works with
    other sector sizes because the limit is expressed as 1 MiB / sector
    size.  Adjust the test case sector counts as needed when testing with
    different sector sized drives.]
    
    Prepare an MSDOS or GPT partitioned disk with the first partition within
    the first 1 MiB.
    
    For MSDOS use:
        dd if=/dev/zero bs=1M of=/dev/sdb
        echo 1,2047 | sfdisk -uS --force /dev/sdb
    
    For GPT use:
        sgdisk --zap-all /dev/sdb
        sgdisk --set-alignment=1 --new 1:34:2047 /dev/sdb
    
    In GParted create a new partition on /dev/sdb as near to the start of
    the drive as possible.  GParted insists on added an extra 1 MiB of space
    before the new partition, making it start at sector 4096, even though
    sector 2048 is free and aligns to whole megabytes.
    
    Delete the preceding partition.  Now GParted allows the new partition
    to be created starting at sector 2048.
    
    GParted only needs to add padding of 1 MiB to account for the partition
    table at the start of the drive when the possible start is within the
    first MiB, not already at the first MiB.  Fix this off by one error in
    the sector comparison.
    
    The reason this has bug has never occurred before is because it is very
    unusual to have the first partition entirely within the first 1 MiB.
    Normally either the (start of) the drive is free so GParted creates an
    unallocated partition object starting at sector 0, so adding 1 MiB of
    padding to preserve the partition table is correct; or the first
    partition starts at 1 MiB so the possible start for a second partition
    is much later in the drive.
    
    Closes #172 - GParted doesn't allow creation of a partition starting at
                  sector 2048 if there is a partition before it

2021-10-02  Pascal Engélibert <tuxmain@zettascript.org>

    Add accessibility relations (!92)
    
    Accessibility relations are essential for usage with screen readers.  It
    enables the screen reader to read the corresponding label along with the
    value of a widget when it gains focus, rather than just the value of the
    widget itself.
    
    Test by running Orca screen reader and tab around the elements of the UI
    and listen to what is read out.  For example before it would be
    "500 GiB", where as after it would be "Unused 500 GiB".
    
    Closes !92 - Add accessibility relations

2021-10-06  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2021-10-03  Aleksandr Melman <Alexmelman88@gmail.com>

    Update Russian translation

2021-09-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash scrolling quickly in the drive selection combobox (#165)
    
    A user reported that scrolling the mouse wheel quickly crashes GParted
    [1].  The minimum setup required to reproduce this crash is 3 drives
    partitioned like this:
        sda - any
        sdb - some unallocated space
        sdc - no unallocated space
    Then move the pointer over the drive selection combobox and scroll the
    mouse wheel quickly downwards.
    
    The sequence of events goes like this:
    1.  The first scroll wheel down event causes the device combobox
        selection to change to the second entry (sdb), which calls
        combo_devices_changed() -> Refresh_Visual().
    2.  Refresh_Visual() sets selected_partition_ptr to point to the largest
        unallocated space partition object in sdb.
    3.  The first Gtk event processing loop in Refresh_Visual() comes
        across the next scroll wheel down event.  This changes the selection
        to the third entry (sdc), which makes a recursive call to
        combo_devices_changed() -> Refresh_Visual().
    4.  Refresh_Visual() sets selected_partition_ptr to NULL as sdc has no
        unallocated space and returns.
    5.  The first call to Refresh_Visual() resumes after the first Gtk event
        loop, continuing the processing for drive sdb.  As sdb has a
        largest unallocated space partition (largest_unalloc_size >= 0),
        DrawingAreaVisualDisk::set_selected() is called with the now
        NULL selected_partition_ptr.
    6.  One of the DrawingAreaVisualDisk::set_selected() methods
        dereferences the NULL pointer, crashing GParted.
    
    As a comment says of selected_partition_ptr "Lifetime:   Valid until the
    next call to Refresh_Visual()."  It just wasn't expected that the next
    call to Refresh_Visual() would be half way through Refresh_Visual()
    itself.
    
    Considered but rejected fixes:
    1.  Remove automatic selection of the largest unallocated space.
        Removes functionality.
    2.  Return at the top of Refresh_Visual() when called recursively.
        This causes GParted to not update the main window with the latest
        selected drive.  In the above example the combobox would show sdc,
        but the main window graphic and partition list would have only been
        updated once showing sdb, the first scrolled selection.
    
    Fix by only having a single Gtk event processing loop at the end of
    Refresh_Visual() with the optional calls to select the largest
    unallocated partition before that loop.  This makes it impossible to
    call the ::set_selected() methods with selected_partition_ptr modified
    by a recursive call.
    
    This fix reverts this earlier commit:
        0fb8cce6992f238b78272b603b69e070cfd46a00
        Reduce flashing redraw from automatic partition selection (#696149)
    
    That commit was in GParted 0.20.0 when Gtk 2 was still used.  Re-testing
    now doesn't see any flashing redrawing from the automatic partition
    selection, with GParted currently using Gtk 3.
    
    [1] Debian bug #991998 - gparted segfaults if scrolling quickly the
        device dropdown list
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=991998
    
    Closes #165 - GParted segfaults if scrolling quickly in the device
                  dropdown

2021-09-18  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Update Serbian translation

2021-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix warning from double assigning to gscreen
    
    Compiling GParted on an older distribution with gtk+-3.0 < 3.22.0, where
    HAVE_GTK_SHOW_URI_ON_WINDOW is undefined, produces this warning message:
        Win_GParted.cc: In member function 'void GParted::Win_GParted::show_help(const Glib::ustring&, const Glib::ustring&)':
        Win_GParted.cc:1822:56: warning: operation on 'gscreen' may be undefined [-Wsequence-point]
          GdkScreen *gscreen = gscreen = gdk_screen_get_default();
                                                                ^
    
    Found on Ubuntu 16.04 LTS with gtk+ 3.18.0.
    
    Stop double assigning to gscreen.  Fixes commit:
        26f4dc504ab6837d717b1f047edc3853b1c67a5f
        Replace deprecated gtk_show_uri() method for help window (!82)

2021-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace /proc/mounts grep with Mount_Info cache reload and query (!89)
    
    Creating a grep process to check if a particular mount is still mounted
    is an unnecessary overhead.  All that is needed is for the Mount_Info
    module to refresh it's copy of /proc/mounts and query that.
    
    To keep the code as simple as possible just reload the whole of the
    Mount_Info module and query the mount cache to determine if the
    particular block device is still mounted at this particular mount point.
    This therefore re-reads /proc/mounts (necessary) and /proc/swaps and
    /etc/fstab (unnecessary).  This is still much less overhead than
    creating a separate grep process.
    
    Closes !89 - Fix unmount error when unmounting below a bind mount point

2021-08-20  Movie Ma <mawei@uniontech.com>

    Fix unmount error when unmounting below a bind mount point (!89)
    
    Bind mounts duplicate part of the file system hierarchy to an additional
    mount point [1].  When mounting and unmounting a second file system
    below a duplicating bind mount Linux automatically presents this lower
    file system as being mounted multiple times.  GParted displays these
    multiple mount points.  However using GParted to unmount this lower file
    system reports an error that the second mount point is no longer
    mounted, because all were unmounted by the first unmount command.
    
    Setup:
    
    1.  Mount an upper file system
    
        # mkdir /mnt/1
        # mount /dev/sdb1 /mnt/1
        # fgrep sdb /proc/mounts
        /dev/sdb1 /mnt/1 ext4 rw,seclabel,relatime,data=ordered 0 0
    
    2.  Bind mount it to a second directory
    
        # mkdir /mnt/b1
        # mount --bind /mnt/1 /mnt/b1
        # fgrep sdb /proc/mounts
        /dev/sdb1 /mnt/1 ext4 rw,seclabel,relatime,data=ordered 0 0
        /dev/sdb1 /mnt/b1 ext4 rw,seclabel,relatime,data=ordered 0 0
    
    3.  Mount a file system below the first
    
        # mkdir /mnt/1/lower
        # mount /dev/sdb2 /mnt/1/lower
        # fgrep sdb /proc/mounts
        /dev/sdb1 /mnt/1 ext4 rw,seclabel,relatime,data=ordered 0 0
        /dev/sdb1 /mnt/b1 ext4 rw,seclabel,relatime,data=ordered 0 0
        /dev/sdb2 /mnt/1/lower xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
        /dev/sdb2 /mnt/b1/lower xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
    
        Two mount records for sdb2 were added to /proc/mounts from one mount
        command.
    
    Then use GParted to unmount sdb2.  It reports this error dialog:
        +-------------------------------------+
        |                                     |
        | Could not unmount /dev/sdb2         |
        |                                     |
        | # umount -v '/mnt/b1/lower'         |
        | umount: /mnt/b1/lower: not mounted. |
        +-------------------------------------+
        |            [  OK  ]                 |
        +-------------------------------------+
    
    Fix by checking that the file system is still mounted before each
    unmount attempt.
    
    [1] mount (8), Description, Bind mount operation
        https://man7.org/linux/man-pages/man8/mount.8.html#DESCRIPTION
    
    Closes !89 - Fix unmount error when unmounting below a bind mount point

2021-09-11  Goran Vidović <trebelnik2@gmail.com>

    Update Croatian translation

2021-09-10  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2021-09-07  Andika Triwidada <andika@gmail.com>

    Add initial Indonesian translation of help (!90)
    
    Closes !90 - Add initial Indonesian translation of help

2021-09-07  Nathan Follens <nfollens@gnome.org>

    Update Dutch translation

2021-09-06  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2021-09-05  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2021-09-04  Seong-ho Cho <shcho@gnome.org>

    Update Korean translation

2021-08-28  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2021-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove (N/A) from comment in FileSystem::rm_temp_dir()
    
    Extra hint of warning status being represented by enumeration constant
    STATUS_N_A is no longer needed since commit:
        8c5c13d613474d3853d6071c5be8055d49bef5aa
        Rename OperationDetailStatus STATUS_N_A to STATUS_WARNING

2021-08-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes to Mount_Info.cc

2021-08-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder parameters to add_mountpoint_entry()
    
    To match the order of the members in struct MountEntry.

2021-08-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract common code into Mount_Info::lookup_uuid_or_label() (#162)
    
    Closes #162 - It is no longer possible to mount a LUKS encrypted file
                  system

2021-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Resolve UUID= and LABEL= refs when searching Mount_Info (#162)
    
    Implemented the second half of the solution described in the previous
    commit.  Resolve UUID= and LABEL= references when searching in the
    Mount_Info cache so that mount points of encrypted file systems listed
    in /etc/fstab can be found using the later added FS_Info details.
    
    Closes #162 - It is no longer possible to mount a LUKS encrypted file
                  system

2021-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Load unresolved UUID= and LABEL= refs into Mount_Info cache (#162)
    
    ISSUE DETAILS
    
    GParted no longer enables Partition > Mount on, for unmounted encrypted
    file systems listed in /etc/fstab.
    
    Steps to reproduce:
    
    1. Create LUKS mapping and open.
       # cryptsetup luksFormat /dev/sdb1 -
       # cryptsetup luksOpen /dev/sdb1 sdb1_crypt
    
    2. Create any file system.
       # mkfs.ext4 /dev/mapper/sdb1_crypt
       # uuid=`blkid -o value -s UUID /dev/mapper/sdb1_crypt`
    
    3. Add /etc/fstab entry.
       # mkdir /mnt/1
       # echo "UUID=$uuid /mnt/1 ext4 defaults 0 0" >> /etc/fstab
    
    4. Run GParted and try Partition > Mount on.
    
    With GParted >= 1.3 no mount point is available.  With GParted <= 1.2
    mount point /mnt/1 is available.
    
    EXPLANATION
    
    Up until GParted 1.2.0 it worked like this:
    1. Ran blkid and loaded the details for every file system into the
       FS_Info cache.  This included results for file systems in open LUKS
       mappings, such as /dev/mapper/sdb1_crypt in the above example.
    2. Read /etc/fstab, resolved UUID= and LABEL= references into block
       device names and added those into the Mount_Info cache.
    3. Looped through all partitions adding mount points known by the
       Mount_Info cache.
    
    After the changes for issue #131 "GParted hangs when non-named device is
    hung" and issue #148 "Encrypted file systems are no longer recognised"
    it works like this instead:
    1. Runs blkid for specified devices and partitions only and loads file
       system details into the FS_Info cache.  Does not include open LUKS
       mappings so no results for those file systems.
    2. Loading of /etc/fstab into the Mount_Info cache is unable to resolve
       UUID= and LABEL= references for file systems in LUKS mappings, so
       they aren't included.
    3. No mount points known for encrypted file systems.
    
    Note that currently when an encrypted file system is added into the data
    model it extends the FS_Info cache <2>, but this is after the Mount_Info
    cache has been loaded <1>.  Call flow is like this:
    
      GParted_Core::set_devices_thread()
        FS_Info::clear_cache()
        FS_Info::load_cache_for_paths()
    1>  Mount_Info::load_cache()
        ...
        set_device_from_disk()
          set_device_one_partition() / set_device_partitions()
            set_luks_partition()
              detect_filesystem_in_encryption_mapping()
    2>          FS_Info::load_cache_for_paths()
              ...
              set_mountpoints()
                partition.add_mountpoints(Mount_Info::get_fstab_mountpoints())
    
    SOLUTION
    
    Also save unresolved UUID= and LABEL= references from /etc/fstab into
    the Mount_Info cache.  Then when searching the Mount_Info /etc/fstab
    cache resolve encountered UUID= and LABEL= references.
    
    THIS COMMIT
    
    Also save unresolved UUID= and LABEL= references into the Mount_Info
    cache.
    
    Closes #162 - It is no longer possible to mount a LUKS encrypted file
                  system

2021-08-07  Fabio Tomat <f.t.public@gmail.com>

    Update Friulian translation

2021-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add note to README about needing gvfs to launch yelp

2021-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space tidy-up some of DialogFeatures

2021-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add labelling of mounted ext2/3/4 (#163)(#600496)
    
    E2label works the same way whether an ext2/3/4 file system is mounted or
    not, by directly reading and writing the superblock from the partition
    block device.  (Technically the superblock will already be in the kernel
    device buffer cache because the kernel has the ext2/3/4 file system
    mounted and a reference to the superblock in the device buffer cache).
    This is safe and supported as confirmed here [1].  As this method has
    always worked, even on the oldest distributions, unconditionally enable
    this feature.
    
        # mkfs.ext4 -L label_1 /dev/sdb3
        # mount /dev/sdb3 /mnt/3
        # e2label /dev/sdb3 label_2
        # blkid /dev/sdb3
        /dev/sdb3: LABEL="label_2" ...
    
    [1] Is labelling a mounted ext2/3/4 file system safe and supported?
        https://lore.kernel.org/linux-ext4/CAMU1PDgNvW_3Jr91iii-Nh=DCuRytVG8ka3-J+a43gKwigx8Yg@mail.gmail.com/T/#u
    
    Bug 600496 - Allow changing ext2/3 label without unmounting
    Closes #163 - Feature request: set label on a mounted btrfs

2021-07-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add labelling of mounted xfs (#163)
    
    XFS also supports labelling of the file system while it is mounted.
    This was added into Linux kernel 4.18 [1] and xfsprogs 4.17.0 [2].
    These versions are newer than available in older but still supported
    distributions so we'll need to detect versions before enabling support.
    These are the oldest releases of distributions which meet the
    requirements.
    
        Distro             EOL        Linux kernel   xfsprogs
        Debian 10          2024-Jun   4.19.0         4.20.0
        RHEL 8             2029-May   4.18.0         5.0.0
        Ubuntu 20.04 LTS   2030-Apr   5.4            5.3.0
    
    As with btrfs a mounted XFS is labelled via it's mount point:
        # mkfs.xfs -L label_1 /dev/sdb2
        # mount /dev/sdb2 /mnt/2
        # xfs_io -c 'label -s mnt_label_2' /mnt/2
        label = "mnt_label_2"
        # blkid /dev/sdb2
        /dev/sdb2: LABEL="mnt_label_2" ...
    
    And cleared with:
        # xfs_io -c 'label -c' /mnt/2
        label = ""
    
    Note that in some error situations xfs_io reports exit status zero and
    writes the failure message to stdout.
        # xfs_io -c 'label -s "mnt label 3"' /mnt/2
        bad argument count 4 to label, expected between 0 and 3 arguments
        # echo $?
        0
    Therefore determine success based on stdout starting with 'label = "'
    reporting the new label or not.
    
    Also note that as seen in this failure case, it is not possible to set
    an XFS label which contains a space character using xfs_io.  However
    that is nothing new as that can't be done using the existing xfs_admin
    command for an unmounted XFS either.
        # umount /mnt/2
        # xfs_admin -L 'umnt label 4' /dev/sdb2
        Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device
        # echo $?
        2
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f7664b31975bd893190708e76b2c424328f0c49b
        xfs: implement online get/set fs label
    [2] https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=cfa10b0f972005b38ed294bca66cebf2f65298ec
        xfs_io: add label command
    
    Closes #163 - Feature request: set label on a mounted btrfs

2021-07-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Show online file system labelling in the Features dialog (#163)
    
    Show support for online labelling using a second tick mark in the
    Features dialog.  This matches how online grow and shrink are shown.
    
    Closes #163 - Feature request: set label on a mounted btrfs

2021-07-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add labelling of mounted btrfs (#163)
    
    Btrfs supports labelling of the file system while it is mounted.  This
    was added into Linux kernel 3.10 [1] and btrfs-progs 3.12 [2].  As the
    oldest supported distributions have the needed versions or newer,
    unconditionally enable without any checking for availability.
    
        Distro             EOL        Linux kernel   btrfs-progs
        Debian 9           2022-Jun   4.19           4.7.3
        RHEL / CentOS 7    2024-Jun   3.10.0         4.9.1
        Ubuntu 18.04 LTS   2023-Apr   4.15.0         4.15.1
    
    Unmounted btrfs is labelled via the block device containing it, where as
    a mounted btrfs is labelled via it's mount point.
    
        # mkfs.btrfs -L initial_label /dev/sdb1
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="initial_label" ...
    
        # btrfs filesystem label /dev/sdb1 unmounted_label_2
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="unmounted_label_2" ...
    
        # mount /dev/sdb1 /mnt/1
        # btrfs filesystem label /dev/sdb1 mounted_label_3
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="mounted_label_3" ...
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a8bfd4abea3da0e28f215e2a2b8c2f1ca27ebe80
        Btrfs: set/change the label of a mounted file system
    [2] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=619dc61cae1420da2dec48f689d49b9b346abc15
        Btrfs-progs: Change the label of a mounted file system
    
    Closes #163 - Feature request: set label on a mounted btrfs

2021-07-19  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2021-07-19  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.3.1   ==========

2021-07-15  Philipp Kiemle <philipp.kiemle@gmail.com>

    Update German translation

2021-07-14  Wolfgang Stöggl <c72578@yahoo.de>

    Update German translation

2021-07-14  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2021-07-14  Ngọc Quân Trần <vnwildman@gmail.com>

    Update Vietnamese translation

2021-07-13  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2021-07-13  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2021-07-12  Enrico Nicoletto <liverig@gmail.com>

    Update Brazilian Portuguese translation

2021-07-12  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2021-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Copy XFS UUID when copying the file system (!85)
    
    For the same reason as in the previous commit, the UUID is copied when
    copying every file system type except for XFS, where a new XFS is
    created with a new UUID.
    
    Again preview of the copy operation expects the UUID to be copied.
    (Look in Partition > Information of the source and pasted partitions
    before the operation is applied).
    
    Fix as before by specifying the desired file system UUID when creating
    the new XFS as part of the copy operation.
    
    However there is an extra complication.  The XFS kernel driver refuses
    to mount a file system with a duplicate UUID of an already mounted XFS.
    
        # mkfs.xfs -L xfs_copy /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # tail -2 /var/log/messages
        Jun  3 21:41:24 localhost kernel: XFS (sdb1): Mounting V5 Filesystem
        Jun  3 21:41:24 localhost kernel: XFS (sdb1): Ending clean mount
    
        # /dev/sdb1: LABEL="xfs_copy" UUID="d654fc7f-e417-4ec6-88e8-8a7d0d46b7d8" TYPE="xfs"
        # mkfs.xfs -L xfs_copy -m uuid="d654fc7f-e417-4ec6-88e8-8a7d0d46b7d8" /dev/sdb2
        # mount /dev/sdb2 /mnt/2
        mount: wrong fs type, bad option, bad superblock on /dev/sdb2,
               missing codepage or helper program, or other error.
    
               In some cases useful info is found in syslog - try
               dmesg | tail or so.
        # echo $?
        32
        # tail -1 /var/log/messages
        Jun  3 21:41:31 localhost kernel: XFS (sdb2): File system has duplicate UUID d654fc7f-e417-4ec6-88e8-8a7d0d46b7d8 - can't mount
    
    Handle this specifying the needed option [1] when mounting the second
    XFS during the copy.
    
        # mount -o nouuid /dev/sdb2 /mnt/2
        # mount | grep /dev/sdb
        /dev/sdb1 on /mnt/1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
        /dev/sdb1 on /mnt/1 type xfs (rw,relatime,seclabel,nouuid,attr2,inode64,noquota)
    
    Duplicating the UUID may seem troublesome, but it is being done:
    1.  To make the GParted copied XFS be as much a clone as possible, to
        match what is does with other file systems.
    2.  It has a valid use case; of cloning a Linux installation to a new
        drive or restoring a partition image backup.  In these cases it is
        much simpler if the UUID of the copy remains the same because it
        avoids having to edit GRUB2 configuration and fstab file system
        mounting which is nearly always done via UUID.
    3.  GParted has the new UUID operation, to change the UUID for cases
        when a copied file system needs to be mounted at the same time as
        the source.
    
    [1] xfs(5) - xfs - layout, mount options, and supported file attributes
        for the XFS filesystem
        https://man7.org/linux/man-pages/man5/xfs.5.html
        "MOUNT OPTIONS
        ...
        nouuid Don't check for double mounted file systems using the file
               system uuid.
        "
    
    Closes !85 - Make XFS copy duplicate the file system label and UUID

2021-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Copy XFS label when copying the file system (!85)
    
    As GParted performs block copy of partitions then the label, which is
    stored in the file system superblock, is also copied.  This is true for
    copies performed using the GParted internal block copy and for EXT2/3/4
    and NTFS which are copied using the file system specific commands
    e2image and ntfsclone respectively.  However when an XFS file system is
    copied the label is not copied because a new file system is created
    using mkfs.xfs and the files copied using xfsdump | xfsrestore.
    
    Preview of the copy operation in GParted also reflects the fact that the
    label will be copied.
    
    Fix this by simply specifying the desired label when creating the new
    destination XFS.
    
    Closes !85 - Make XFS copy duplicate the file system label and UUID

2021-05-29  Curtis Gedak <gedakc@gmail.com>

    Handle change in path for udisks2-inhibit executable (!84)
    
    Debian (and derived) distros with the udisks2 [1] repository and the
    additional 'udisks2-inhibit' executable had the location changed from:
        /usr/lib/udisks2/
    to:
        /usr/libexec/udisks2/
    with udisks2 version 2.8.4-2 and the following commit:
    
        f6744a33 - Move the daemons to /usr/libexec now that's allowed in the policy
        https://salsa.debian.org/utopia-team/udisks2/-/commit/f6744a3364eafdb07e3e78e329f202394804c574
    
    Distros such as Fedora and openSUSE are unaffected as the udisks [2]
    repository does not contain 'udisks2-inhibit'.
    
    [1] udisks2 Debian (and derived) repository
        https://salsa.debian.org/utopia-team/udisks2
    
    [2] udisks repository
        https://github.com/storaged-project/udisks
    
    Closes !84 - Handle change in path for udisks2-inhibit executable

2021-05-31  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2021-05-23  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2021-05-23  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2021-05-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix recognition of SD/MMC device names (!83)
    
    User reported that GParted didn't detect their eMMC drive [1].  Not
    recognised device name was /dev/mmcblk0.  Confirmed that the regression
    was introduced by this commit [2].  Fix the code and regular expression
    used to recognise SD/MMC device names.
    
    [1] GParted forum thread: eMMC drive not detected...?
        http://gparted-forum.surf4.info/viewtopic.php?id=17994
    
    [2] 52930f30ae8dc2c9dd1f64d2df654d9f1a1afb8a
        Refactor load_proc_partitions_info_cache() a bit (#131)
    
    Closes !83 - Fix recognition of SD/MMC device names

2021-05-19  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2021-05-18  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2021-05-15  Curtis Gedak <gedakc@gmail.com>

    Replace deprecated gtk_show_uri() method for help window (!82)
    
    The gtk_show_uri() [1] method was deprecated as of gtk3 version 3.22 and
    has been replaced with gtk_show_uri_on_window [2].
    
    [1] https://developer.gnome.org/gtk3/stable/gtk3-Filesystem-utilities.html#gtk-show-uri
    [2] https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.7
    
    Note that AppInfo::launch_uris() has been removed because with
    glib/glibmm >= 2.58 AppInfo::launch_uris() always reports success even
    when yelp is not launched and in such cases prevents the dialog
    reporting the error from being displayed.
    
    Closes !82 - Replace deprecated gtk_show_uri() method for help window

2021-05-17  Seong-ho Cho <shcho@gnome.org>

    Update Korean translation

2021-05-11  Ask Hjorth Larsen <asklarsen@gmail.com>

    Updated Danish translation

2021-05-04  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2021-05-03  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2021-05-03  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.3.0   ==========

2021-05-01  Jiri Grönroos <jiri.gronroos@iki.fi>

    Update Finnish translation

2021-05-01  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2021-04-27  Ngọc Quân Trần <vnwildman@gmail.com>

    Update Vietnamese translation

2021-04-26  Fran Dieguez <frandieguez@gnome.org>

    Update Galician translation

2021-04-26  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2021-04-26  Fran Dieguez <frandieguez@gnome.org>

    Update Galician translation

2021-04-26  Hannie Dumoleyn <hannie@ubuntu-nl.org>

    Update Dutch translation

2021-04-26  Hannie Dumoleyn <hannie@ubuntu-nl.org>

    Update Dutch translation

2021-04-26  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2021-04-26  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2021-04-26  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2021-04-25  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2021-04-25  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2021-04-25  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2021-04-25  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2021-04-25  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2021-04-25  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Mark remaining get_filesystem_*() methods as returning const strings

2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Comment differences between FileSystem::execute_command() methods

2021-04-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report this LUKS passphrase request reason as resize (#59)
    
    So far when prompting for the LUKS passphrase the dialog always looks
    like this:
    
        +------------------------------------------------+
        |           LUKS Passphrase /dev/sdb1            |
        +------------------------------------------------+
        | Enter LUKS passphrase to open /dev/sdb1        |
        | Passphrase:    [                             ] |
        |                                                |
        |                                                |
        |                          [ Cancel ] [ Unlock ] |
        +------------------------------------------------+
    
    Specifically the first line of the dialog says the reason to provide the
    passphrase is to open the encryption mapping.  Now the passphrase may
    also be requested when resizing the encryption mapping, as part of a
    resize of check operation, show the appropriate reason in the password
    dialog.
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-04-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also prompt for LUKS password as required for check operation (#59)
    
    A check operation involves (1) checking the file system, (2) growing the
    encryption volume and (3) growing the file system.  Therefore prompt for
    the LUKS passphrase as required when composing a check operation too.
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass LUKS password as needed when resizing open mapping (#59)
    
    This is the final piece which enables GParted to pass the LUKS
    passphrase when resizing an open LUKS encryption mapping when
    'cryptsetup resize' will prompt for it.
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add ability for small writes to stdin of operation tracked child processes (#59)
    
    This is the equivalent to what was previously done when adding opening
    of LUKS mappings.  Namely to add a way to pass the LUKS passphrase to
    'cryptsetup luksOpen' via standard input.  Previously the functionality
    was added to Utils::execute_command() [1].  Now it is also needed to
    pass the LUKS passphrase to 'cryptsetup resize', which is executed as
    part of applying resize and check operations to an encrypted file
    system.  So add this functionality to FileSystem::execute_command().
    
    For now writing to stdin is only needed for the one variant of
    FileSystem::execute_command() which doesn't have progress tracking
    callbacks.  Writing to stdin can easily be added to the other progress
    tracking callback variants of execute_command() when needed.
    
    [1] 8dff80edc65b2923b400ddadebacf9bcf378d09f
        Add ability for small writes to stdin of child processes (#795617)
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract common code into generate_encryption_mapping_name() (#59)
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-03-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ask for LUKS passphrase for resize operation as required (#59)
    
    When composing a resize operation on an open encryption mapping, use the
    existing LUKS password dialog to prompt for the passphrase, if and only
    if 'cryptsetup resize' will prompt and GParted doesn't already have a
    password.  'cryptsetup resize' will prompt for a LUKS passphrase when
    the passphrase was stored in the kernel keyring service,
    key_loc == KEYLOC_KeyRing.  See the previous commit "Capture LUKS
    mapping master encryption key location (#59)" for more details.
    
    As commented in the code GParted specifically doesn't support the case
    where the LUKS passphrase is changed while GParted is running and it
    knew the old passphrase.  When resizing an open encryption mapping
    GParted will just pass the old out of date passphrase it knows and the
    resize will fail like this:
    
        # cryptsetup status sdb2_crypt | egrep 'type|key location'
          type:         LUKS2
          key location: keyring
        # dmsetup table --target crypt
        sdb2_crypt: 0 491520 crypt aes-xts-plain64 :64:logon:cryptsetup:3d040240-97ba-4559-af98-72c3be500498-d0 0 8:18 32768
    
        # echo -n oldpassword | cryptsetup -v --size 491520 resize sdb2_crypt
        No key available with this passphrase.
        Command failed with code -2 (no permission or bad passphrase).
        # echo $?
        2
    
    To work around this either close and restart GParted or close and reopen
    the encryption mapping.  The former because GParted doesn't save
    passwords across a restart so will prompt and the latter because GParted
    will use the wrong old passphrase to try to open the mapping and then
    prompt for the correct passphrase until successfully opened.
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-03-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Capture LUKS mapping master encryption key location (#59)
    
    ISSUE OVERVIEW
    
    When GParted tries to resize an open LUKS encryption mapping and the
    volume (master) key was stored in the kernel keyring service [1] it
    fails like this:
    
        Check and repair file system ([Encrypted] ext4) on /dev/...(ERROR)
        + calibrate /dev/sdd1                                      (SUCCESS)
        + check file system on /dev/mapper/sdd1_crypt for errors...(SUCCESS)
        + grow encryption volume to fill the partition             (ERROR)
          + cryptsetup -v resize 'sdd1_crypt'                      (ERROR)
              Command failed with code -1 (wrong or missing parameters).
              Nothing to read on input.
    
    This error occurs with cryptsetup >= 2.0, kernel >= 4.10 and LUKS2
    format because the crypt Device-Mapper target no longer has the volume
    key so cryptsetup resize prompts for a passphrase, but GParted doesn't
    provide it.
    
    THIS COMMIT
    
    Additionally capture the location of the volume (master) key location
    for active encryption mappings.  Do this the using the same method that
    cryptsetup uses [2][3].  Namely if the first character of the KEY is a
    ":" then the key *was* stored in the kernel keyring service, otherwise
    it *is* store in the Device-Mapper crypt target as previously.
    
        # echo -n badpassword | cryptsetup luksFormat --type luks1 /dev/sdb1 -
        # echo -n badpassword | cryptsetup luksOpen /dev/sdb1 sdb1_crypt
        # cryptsetup status sdb1_crypt | egrep 'type|key location'
          type:         LUKS1
          key location: dm-crypt
    
        # echo -n badpassword | cryptsetup luksFormat --type luks2 /dev/sdb2 -
        # echo -n badpassword | cryptsetup luksOpen /dev/sdb2 sdb2_crypt
        # cryptsetup status sdb2_crypt | egrep 'type|key location'
          type:         LUKS2
          key location: keyring
    
        # dmsetup table --target crypt
        sdb1_crypt: 0 520192 crypt aes-xts-plain64 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 8:17 4096
        sdb2_crypt: 0 491520 crypt aes-xts-plain64 :64:logon:cryptsetup:3d040240-97ba-4559-af98-72c3be500498-d0 0 8:18 32768
                                                   ^
    First character of the KEY field --------------'
    
    [1] Integration with the kernel keyring service
        https://gitlab.com/cryptsetup/cryptsetup/blob/v2.0.0/docs/Keyring.txt
        "
        Starting with cryptsetup 2.0 we load [Volume Key] VK in kernel
        keyring by default for LUKSv2 devices ...
    
        In summary, the key description visible in dm-crypt table line is a
        reference to VK that usually no longer exists in kernel keyring
        service if you used cryptsetup to for device activation.
        "
    
    [2] cryptsetup/v2.3.5/lib/libdevmapper.c:_dm_target_query_crypt()
        https://gitlab.com/cryptsetup/cryptsetup/-/blob/v2.3.5/lib/libdevmapper.c#L2031
            if (key_[0] == ':')
                *act_flags |= CRYPT_ACTIVATE_KEYRING_KEY;
    
    [3] cryptsetup/v2.3.5/src/cryptsetup.c:action_status()
        https://gitlab.com/cryptsetup/cryptsetup/-/blob/v2.3.5/src/cryptsetup.c#L839
            log_std("  key location: %s\n", (cad.flags & CRYPT_ACTIVATE_KEYRING_KEY) ? "keyring" : "dm-crypt");
    
    Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
                 to read on input"

2021-04-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ignore libparted unrecognised disk label message from encryption mappings (#152)
    
    When GParted probes an open encryption mapping which is either blank or
    contains a file system which libparted doesn't recognise, such as:
    exfat, f2fs, lvm2 pv, minix or reiser4, then the partition also gets
    this warning message:
        /dev/mapper/sdb11_crypt: unrecognised disk label
    
    Clear the message so that it isn't shown in the GUI.
    
    Note that the message is still written to stderr by GParted, like all
    libparted exceptions are.  This is done by GParted's libparted exception
    handler:
        GParted_Core::ped_exception_handler()
          _ped_exception_handler()
    
    Closes #152 - GParted crashed when trying to probe an encrypted
                  partition containing content that libparted doesn't
                  recognise

2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder cases in set_device_and_disk() and use if fail return early (#152)
    
    The previous commit "Resolve empty drive displayed as blank minor logic
    issue (#152)" left the code in set_device_and_disk() some what
    unsightly.
    
    Refactor the whole function.  Use if fail return early pattern for
    failure of the get_device() call at the start of the function.  Reorder
    the 4 cases into a single depth if then else if chain.  Hopefully this
    is a little easier to follow.
    
    Closes #152 - GParted crashed when trying to probe an encrypted
                  partition containing content that libparted doesn't
                  recognise

2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Resolve empty drive displayed as blank minor logic issue (#152)
    
    The previous commit "Remove coding landmine in get_disk() (#152)" made
    an empty drive without a disk label (partition table) display as
    nothing, instead of the normal single unallocated partition with warning
    "unrecognised disk label".
    
    The previous commit said:
        3. The two remaining direct calls to get_disk() where the strict
           parameter is explicitly set to false, from set_device_from_disk()
           and detect_filesystem_in_encryption_mapping(), are when scanning.
           As the pass strict=false they don't allow the PedDevice deletion
           to occur if no recognised disk label is found.
    
    This is true, but get_disk(..., strict=false) additionally returned true
    even if there was no disk label.  And in set_device_from_disk() the
    empty drive case is inside the if branch of the get_disk() call
    returning true.
    
    Simply fix this by calling get_disk(), ignoring the return value.
    
    Closes #152 - GParted crashed when trying to probe an encrypted
                  partition containing content that libparted doesn't
                  recognise

2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove coding landmine in get_disk() (#152)
    
    get_disk() is the wrapper around libparted's ped_disk_new() which reads
    a disk label from the specified device and if successful creates the in
    memory PedDisk object to represent it.  In the case that libparted
    doesn't recognise a disk label or a file system, having get_disk() go
    and destroy the passed in PedDevice object via parameter lp_device is
    very unexpected behaviour hence describing it as a coding landmine.
    
    BACKGROUND
    
    1. Early on GParted only worked with devices with valid disk labels.
       FileSystem.h:open_device_and_disk() required both ped_device_get()
       and ped_disk_new() to succeed or neither to succeed.
    2. Commit [1] added support for devices which didn't yet have a disk
       label.  open_device_and_disk() had default parameter strict=true
       added.  While scanning strict=false was passed which allowed
       open_device_and_disk() to return success if only ped_device_get()
       succeeded and ped_disk_new() failed when the disk was empty.  All
       other times open_device_and_disk() was called with default
       strict=true, still requiring both or neither to succeed.
    3. Commit [2] added support for whole disk file systems.  The now named
       get_device_and_disk() had it's functionality split between
       get_device() and get_disk().  This result in the code landmine being
       left behind: get_disk() destroying the passed device object if
       default parameter strict=true and no disk label or file system was
       detected.
    
    ANALYSIS
    
    1. Since support for whole disk file systems [2] all current calls to
       get_device_and_disk() let the strict parameter default to true and
       are only called on known partitions within disk labels when applying
       a change to that partition.  Therefore they don't care about the
       behaviour of get_disk(), just that get_device_and_disk() maintains
       that both ped_device_get() and ped_disk_new() succeed or neither
       succeed.
    2. Two direct calls to get_disk() where the strict parameter defaults to
       true, from calibrate_partition() and erase_filesystem_signatures(),
       only do so on known partitions within disk labels as part of applying
       a change to that partition.  Therefore ped_disk_new() will succeed
       and so PedDevice isn't deleted when not wanted.
    3. The two remaining direct calls to get_disk() where the strict
       parameter is explicitly set to false, from set_device_from_disk() and
       detect_filesystem_in_encryption_mapping(), are when scanning.  As the
       pass strict=false they don't allow the PedDevice deletion to occur if
       no recognised disk label is found.
    
    FIX
    
    Remove the strict parameter from get_disk() and get_device_and_disk() as
    it's no longer needed.  Remove the code landmine by removing the side
    affect of destroying the PedDevice object if a disk label isn't found.
    Make sure get_device_and_disk() maintains the all or nothing behaviour.
    
    Also don't pass lp_device by reference to a pointer to get_disk() so the
    code can't change where lp_device points.
    
    [1] 038c5c5d99ad842f1a57f12222c884be29f4df4f
        P (special thanks to mantiena-baltix for bringing this issue to my
    
    [2] 51ac4d56489653854cd22787238a14bfa66a6ad4
        Split get_device_and_disk() into two (#743181)
    
    Closes #152 - GParted crashed when trying to probe an encrypted
                  partition containing content that libparted doesn't
                  recognise

2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly const and assert detect_filesystem() parameters (#152)
    
    As discussed in the previous commit "Don't crash probing libparted
    unrecognised encrypted file system (#152)", detect_filesystem() accepted
    a NULL lp_device pointer and dereferenced it leading to the crash.
    Document the requirement for lp_device parameter to be non-NULL via an
    assert and also correctly const the parameters.
    
    This forces needing to const the lp_partition parameter to
    get_partition_path() too.  Also assert it's non-NULL requirement.
    
    Closes #152 - GParted crashed when trying to probe an encrypted
                  partition containing content that libparted doesn't
                  recognise

2021-04-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't crash probing libparted unrecognised encrypted file system (#152)
    
    Create a LUKS encrypted partition and open it.  Then either leave the
    contents blank or create a file system which libparted doesn't
    recognise, such as: exfat, f2fs, lvm2 pv, minix or reiser4.  When
    GParted probes the disk device it crashes.
    
        # echo -n badpassword | cryptsetup luksFormat /dev/sdb11
        # echo -n badpassword | cryptsetup luksOpen /dev/sdb11 sdb11_crypt
        # ./gpartedbin /dev/sdb
        GParted 1.2.0-git
        configuration (none)
        libparted 3.1
        /dev/mapper/sdb11_crypt: unrecognised disk label
        Segmentation fault (core dumped)
    
    Backtrace:
        #0  0x0000000000460f68 in GParted::GParted_Core::detect_filesystem(_PedDevice*, _PedPartition*, std::vector<Glib::ustring, std::allocator<Glib::ustring> >&)
            (lp_device=0x0, lp_partition=0x0, messages=std::vector of length 0, capacity 0)
            at GParted_Core.cc:1235
        #1  0x00000000004615a6 in GParted::GParted_Core::detect_filesystem_in_encryption_mapping(Glib::ustring const&, std::vector<Glib::ustring, std::allocator<Glib::ustring> >&)
            (path=..., messages=std::vector of length 0, capacity 0)
            at GParted_Core.cc:1096
        #2  0x00000000004647c8 in GParted::GParted_Core::set_luks_partition(GParted::PartitionLUKS&)
            (this=this@entry=0x7fff43f974e0, partition=...)
            at GParted_Core.cc:1011
        #3  0x000000000046511b in GParted::GParted_Core::set_device_partitions(GParted::Device&, _PedDevice*, _PedDisk*)
            (this=this@entry=0x7fff43f974e0, device=..., lp_device=0x7efc780008c0, lp_disk=0x7efc78000d10)
            at GParted_Core.cc:883
        #4  0x00000000004658e3 in GParted::GParted_Core::set_device_from_disk(GParted::Device&, Glib::ustring const&)
            (this=this@entry=0x7fff43f974e0, device=..., device_path=...)
            at GParted_Core.cc:704
        #5  0x0000000000465fff in GParted::GParted_Core::set_devices_thread(std::vector<GParted::Device, std::allocator<GParted::Device> >*)
            (this=0x7fff43f974e0, pdevices=0x7fff43f96bc8)
            at GParted_Core.cc:266
        #6  0x00007efc99ba413d in call_thread_entry_slot ()
            at /lib64/libglibmm-2.4.so.1
        #7  0x00007efc97dc8555 in g_thread_proxy ()
            at /lib64/libglib-2.0.so.0
        #8  0x00007efc96ab4ea5 in start_thread () at /lib64/libpthread.so.0
        #9  0x00007efc967dd9fd in clone () at /lib64/libc.so.6
    
    The relevant sequence of events goes like this:
        detect_filesystem_in_encryption_mapping(path, ...)
          lp_device = NULL
          get_device(path, lp_device)
            lp_device = ped_device_get(path.c_str())
            return true
          lp_disk = NULL
          lp_partition = NULL
          get_disk(lp_device, lp_disk)  // + default parameter strict=true
            lp_disk = ped_disk_new(lp_device)
              // No libparted recognised disk label or file system found, so
              // NULL returned.
            destroy_device_and_disk(lp_device, lp_disk)
              ped_device_destroy(lp_device)
              lp_device = NULL
            return false
          detect_filesystem(lp_device, lp_partition, ...)
            path = lp_device->path
    
    The key points are:
    1. get_device() created a PedDevice object pointed to by lp_device;
    2. get_disk() didn't find a libparted recognised disk label or file
       system but also unexpectedly destroyed the PedDevice object and
       assigned NULL to lp_device;
    3. detect_filesystem() dereferenced lp_device assuming it was still
       valid.
    
    Implement the simplest possible fix by telling get_disk() to not
    destroy the needed PedDevice object when there's no recognised content.
    This is the same as how get_disk() is called in set_device_from_disk().
    
    Closes #152 - GParted crashed when trying to probe an encrypted
                  partition containing content that libparted doesn't
                  recognise

2021-04-14  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also use libparted to probe for encrypted file systems (#148)
    
    Even though blkid is considered mandatory [1] GParted should still
    perform reasonably when blkid is not available, provided that is not too
    onerous a task.  Also use libparted file system identification inside
    encryption mappings.
    
    [1] 749a2495716a82a7287fad943109b6cfb927245c
        Document blkid command as a mandatory requirement (#753436)
    
    Closes 148 - Encrypted file systems are no longer recognised

2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Probe encryption mappings as needed using blkid (#148)
    
    GParted no longer recognises file systems inside LUKS encryption, apart
    from the few recognised by GParted's internal detection.  Bisected to
    this commit:
        8b35892ea59958aa1eec596a48a36b0fa7950dca
        Pass device and partition names to blkid (#131)
    
    Prior to this commit blkid was run querying all known block devices
    including active encryption mappings, hence prior recognition.  With
    this commit blkid was run only for named or found disk devices and
    associated found partitions from /proc/partitions, so no more
    recognition of encrypted file systems.
    
    Fix by running blkid on the encryption mapping just before querying for
    the file system.  This restores the level of functionality that existed
    before.
    
    Closes 148 - Encrypted file systems are no longer recognised

2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract some code into detect_filesystem_in_encryption_mapping() (#148)
    
    To avoid making set_luks_partition() more complicated extract the file
    system detection portion into a new function.
    
    Closes 148 - Encrypted file systems are no longer recognised

2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make FS_Info (blkid) cache incrementally loadable (#148)
    
    Since changes for issue #131 "GParted hangs when non-named device is
    hung" FS_Info cache is initialised, cleared and loaded via one call to
    load_cache_for_paths().  It runs blkid for named or found disk devices
    and associated found partitions from /proc/partitions, rather than
    running blkid and letting it report for all block devices.
    
    To avoid the possibility of using blkid on an encryption mapping on a
    non-specified and possibly hung block device GParted can't just specify
    all encryption mappings.  Instead only encryption mappings which belong
    to the above identified block devices should be probed.  That requires
    identifying LUKS encryption data in the block devices first so will
    require subsequently loading additional data into the FS_Info cache and
    running blkid again.
    
    To accommodate this make the FS_Info cache incrementally loadable,
    rather than doing everything in a single call to load_cache_for_paths().
    Have a separate clear_cache() call which initialises and clears the
    cache and make load_cache_for_paths() just run blkid and insert data for
    the named paths.
    
    Closes 148 - Encrypted file systems are no longer recognised

2021-04-02  Nathan Follens <nfollens@gnome.org>

    Update Dutch translation

2021-03-27  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2021-03-25  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2021-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update HACKING file with coding style hints and tips

2021-03-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Explicitly read the reiser4 volume UUID when present
    
    Reiser4 has introduced new disk format which includes support for
    spanning the file system over multiple block devices (subvolumes)
    [1][2].  As such the output of the debugfs.reiser4 for the UUID has
    changed slightly.  So far the new reiser4progs package (version 2.0.x)
    is only available as a Debian experimental package.
    
    Using reiser4progs 1.2.1 the old output was like this:
    
        $ debugfs.reiser4 test.img
        debugfs.reiser4 1.2.1
        Format release: 4.0.2
        Copyright (C) 2001-2005 by Hans Reiser, licensing governed by reiser4progs/COPYING.
    
        Master super block (16):
        magic:          ReIsEr4
        blksize:        4096
        format:         0x0 (format40)
        uuid:           1116afce-99fd-4a6e-94cb-2d9f19c91d67
        label:          <none>
    
        ...
    
    With reiser4progs 2.0.4 the new output is like this:
    
        $ debugfs.reiser4 test.img
        debugfs.reiser4
        Package Version: 2.0.4
        Software Framework Release: 5.1.3
        Copyright (C) 2001-2005 by Hans Reiser, licensing governed by reiser4progs/COPYING.
        Master super block (16):
        magic:          ReIsEr4
        blksize:        4096
        volume:         0x1 (asym)
        distrib:        0x1 (fsx32m)
        format:         0x1 (format41)
        description:    Standard layout for logical volumes.
        stripe bits:    14
        mirror id:      0
        replicas:       0
        volume uuid:    9538bfa3-5694-4abe-864c-edc288a9d801
        subvol uuid:    d841c692-2042-49e6-ac55-57e454691782
        label:          <none>
    
        ...
    
    GParted happens to read the correct UUID just because the first matching
    "uuid" string in the output is the volume UUID.  Make the code more
    robust by explicitly reading the volume uuid when labelled as such.
    
    [1] Logical Volumes Howto
        https://reiser4.wiki.kernel.org/index.php/Logical_Volumes_Howto
    [2] Logical Volumes Background
        https://reiser4.wiki.kernel.org/index.php/Logical_Volumes_Background

2021-03-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor reiser4::read_uuid() into if fail return early pattern

2021-03-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ignore test failure when reiser4 reports null UUID (#145)
    
    The GitLab CI ubuntu_test job has occasionally been failing like this,
    perhaps once every few weeks or so.
    
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4
        test_SupportedFileSystems.cc:569: Failure
        Expected: (m_partition.uuid.size()) >= (9U), actual: 0 vs 9
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4, where GetParam() = 24 (17 ms)
        [----------] 1 test from My/SupportedFileSystemsTest (17 ms total)
    
    Turns out there are 2 bugs in resier4progs.  One causes debugfs.reiser4
    to report a null UUID if the first byte of the UUID happens to be zero
    [1], and the other cases mkfs.resier4 to write a corrupted UUID,
    sometimes a null (all zeros) UUID [2].
    
    There is a 1 in 256 chance of getting a null UUID [2] when creating and
    reading a reiser4 file system, hence the occasional failure of the CI
    job.  The centos_test job isn't affected because CentOS doesn't have the
    reiser4progs package.
    
    Fix this by detecting when reiser4 reports a null UUID and assign a
    dummy UUID to make the test pass.  This does mean that there is a 1 in
    256 chance of not detecting a true failure.  However that still means
    there is a 255 in 256 chance of detecting a true failure.  That's good
    odds.  When a null UUID is detected for a reiser4 file system the test
    output looks like this:
    
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4
        test_SupportedFileSystems.cc:580: Ignore test failure of a null UUID.
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4 (46 ms)
    
    [1] https://github.com/edward6/reiser4progs/commit/4802cdb18ae03031d0e51a58b6655f3b99021ec2
        Fix up repair_master_print()
    
    [2] https://github.com/edward6/reiser4progs/commit/44cc024f398f60adef1519426d65f3f081ee826a
        Stop occasionally making file systems with null UUIDs
    
    Closes #145 - Sporadic failure of test case
                  My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4

2021-03-13  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2021-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Print kernel version, etc in GitLab CI (#147)
    
    Print the kernel version and supported file systems inside the GNOME
    GitLab CI jobs as a debugging aid.  Kernel version helps identify the
    CI job runner's distribution to identify kernel features.  Supported
    file systems identifies which ones can be mounted, should that be
    possible in future.  Print supported file systems before and after the
    tests because checking for support may load additional modules.  See
    calls to Utils::kernel_supports_fs() for: btrfs, jfs, nilfs2 and xfs.
    
    Closes #147 - GitLab CI test failure from *.CreateAndGrow/jfs

2021-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Exclude more GitLab CI file system tests needing loop devices (#147)
    
    For the first time ever the ubuntu_test GitLab CI job failed running the
    JFS grow test like this.  Fragment from tests/test-suite.log:
    
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/jfs
        test_SupportedFileSystems.cc:387: Failure
        Failed
        create_loopdev(): Execute: losetup --find --show 'test_SupportedFileSystems.img'
        losetup: cannot find an unused loop device
        create_loopdev(): Losetup failed with exit status 1
        create_loopdev(): Failed to create required loop device
        Error: Could not stat device  - No such file or directory.
        test_SupportedFileSystems.cc:446: Failure
        Value of: lp_device != NULL
          Actual: false
        Expected: true
        test_SupportedFileSystems.cc:649: Failure
        Value of: m_fs_object->create(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        mkfs.jfs -q -L '' ''    00:00:00  (ERROR)
        mkfs.jfs version 1.1.15, 04-Mar-2011
    
        The system cannot find the specified device.
    
        detach_loopdev(): Execute: losetup --detach ''
        losetup: : failed to use device: No such device
        detach_loopdev(): Losetup failed with exit status 1
        detach_loopdev(): Failed to detach loop device.  Test NOT affected
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/jfs, where GetParam() = 17 (24 ms)
    
    JFS can only be grown when mounted by the kernel and GParted only
    enables JFS grow support when, among other things, kernel support is
    detected.
    
    Unknowingly the JFS grow test had always previously been skipped, even
    in the ubuntu_test CI job which installs jfsutils, because the kernel
    didn't support JFS.  Capture of this test from another run of the
    ubuntu_test CI job:
    
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/jfs
        test_SupportedFileSystems.cc:641: Skip test.  grow not supported or support not found
        [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/jfs (0 ms)
    
    Plus additional debug added into the job based on what
    Utils::kernel_supports_fs() does to identify kernel support:
    
        $ fgrep jfs /proc/filesystems || true
        $ modprobe jfs || true
        modprobe: FATAL: Module jfs not found in directory /lib/modules/3.10.0-1160.11.1.el7.x86_64
        $ fgrep jfs /proc/filesystems || true
    
    Therefore until now every GitLab job runner machine kernel didn't
    support JFS, but for the first time ever this ubuntu_test job ran on a
    runner machine where the kernel did support JFS, hence the attempt to
    use losetup.
    
    Examining test_SupportFileSystems.cc there are 24 file system tests
    which specify SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS(), but only
    17 exclusions in .gitlab-ci.yaml [1].  The 7 tests without exclusions
    are:
    
        *.CreateAndReadLabel/lvm2pv
        *.CreateAndReadUUID/lvm2pv
        *.CreateAndWriteLabel/lvm2pv
        *.CreateAndWriteUUID/lvm2pv
        *.CreateAndGrow/jfs
        *.CreateAndGrow/nilfs2
        *.CreateAndShrink/nilfs2
    
    For LVM2 PVs reading and writing of labels and UUIDs aren't implemented
    (only reading of UUIDs could be supported as the others are impossible)
    so those tests are always skipped.  Add unit test exclusions just for
    completeness.
    
    JFS grow is this case.  NILFS2 grow and shrink are more cases where
    kernel support is needed.  Add unit test exclusions to stop attempting
    to run JFS and NILFS2 resizing tests, which don't currently work because
    losetup doesn't work in the GitLab CI docker images [1].
    
    [1] 39fdfe51da4bddecb2c99a9b544b270130423e72
        Exclude unit tests needing losetup in Docker CI image (!59)
    
    Closes #147 - GitLab CI job failure from *.CreateAndGrow/jfs

2021-03-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass constant string by reference to lvm2_pv_size_to_num()
    
    It is common C++ practice to pass a constant object by reference to
    avoid constructing a duplicate object for pass by value [1].
    
    [1] How to pass objects to functions in C++?
        https://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/2139254#2139254

2021-03-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Install gpartedbin into @libexecdir@ (#85)
    
    Executables which are not intended for execution by users, but by other
    programs, should be installed into /usr/libexec [1][2].  gpartedbin
    falls into this category.  Update it's installation accordingly.
    
    Standard Autotools details: gpartedbin will be installed into
    EPREFIX/libexec by default.  To install gpartedbin into a different
    directory set libexecdir when configuring the build system.  Like this
    from git:
        ./autogen.sh --libexecdir=DIR
    or like this from tar release:
        ./configure --libexecdir=DIR
    
    [1] Filesystem Hierarchy Standard, version 3.0,
        4.7. /usr/libexec : Binaries run by other programs (optional)
        https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s07.html
        "/usr/libexec includes internal binaries that are not intended to be
        executed directly by users or shell scripts.
        "
    
    [2] GNU Coding Standards, June 12, 2020,
        7.2.5 Variables for Installation Directories
        https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
        "libexecdir
        The directory for installing executable programs to be run by other
        programs rather than by users.  This directory should normally be
        /usr/local/libexec, but write it as $(exec_prefix)/libexec.  (If you
        are using Autoconf, write it as '@libexecdir@'.)
        "
    
    Closes #85 - Please install gpartedbin under /usr/libexec instead of
                 /usr/sbin

2021-03-08  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2021-03-05  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2021-02-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update "Detecting BitLocker" URL code comment
    
    The document has moved on the Microsoft website.  Update the URL
    accordingly, and add an Internet Archive URL too, for good measure.

2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to default_fs
    
    ... in class Dialog_Partition_New and slightly refactor the code in
    build_filesystems_combo() method which sets it.
    
    Change the name from first_creatable_fs to default_fs to be more
    immediately obvious what the variable represents.  As default_fs is used
    to index the items in the combo_filesystem derived ComboBox, make it's
    type an int to match the type of the parameter passed to
    Gtk::ComboBox::set_active() [1].  Initialise default_fs to -1 (no
    selection) in the class constructor [2], which also allows removal of
    local variable set_first just used to track whether first_creatable_fs
    had been assigned yet or not.
    
    [1] gtkmm: Gtk::ComboBox Class Reference, set_active()
        https://developer.gnome.org/gtkmm/stable/classGtk_1_1ComboBox.html#a4f23cf08e85733d23f120935b235096d
    
    [2] C++ FAQ / Should my constructors use "initialization lists" or
        "assignment"?
        https://isocpp.org/wiki/faq/ctors#init-lists

2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't rely on unformatted being the last file system type
    
    ... in Dialog_Partition_New::build_filesystems_combo().  set_data()
    populates this->FILESYSTEMS[] vector with supported file systems with
    cleared, unformatted and extended added to the end.  Then
    build_filesystems_combo() adds those items to combo_filesystem, skipping
    extended.  It then makes the last item in the combobox sensitive,
    relying on the fact that it is unformatted.
    
    Refactor the code so build_filesystems_combo() no longer relies on
    unformatted being the last item in combo_filesystem to always enable it.

2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary call to combobox_changed(false)
    
    ... in Dialog_Partition_New::set_data().  As the change signal for
    combo_filesystem has already been connected, combo_changed(false) is
    automatically called by setting the active selection.  Therefore remove
    the unnecessary call.

2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename combobox_change() parameter to combo_type_changed
    
    "Type" was rather a generic name.  Use "combo_type_changed" which makes
    it clear that the boolean parameter indicates whether a change to
    combo_type or one of the other ComboBoxes triggered this callback.

2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash in Create New Partition dialog when changing type (#101)
    
    On an MSDOS partitioned drive, open the Create New Partition dialog and
    change "created as" from Primary Partition to Extended Partition and
    back to Primary Partition.  On Fedora and RHEL/CentOS 8, which builds
    packages with FORTIFY_SOURCE [1][2] and GLIBXX_Assertions [3][4]
    enabled, GParted will crash.
    
    Run GParted built with the default compilation options under valgrind
    and repeat the test.  Multiple out of bounds reads are reported like
    this:
      # valgrind --track-origins=yes ./gpartedbin
      ...
      ==232613== Invalid read of size 8
      ==232613==    at 0x441AF6: GParted::Dialog_Partition_New::combobox_changed(bool) (Dialog_Partition_New.cc:354)
      ==232613==    by 0x443DBD: sigc::bound_mem_functor1<void, GParted::Dialog_Partition_New, bool>::operator()(bool const&) const (mem_fun.h:2066)
    
    Coming from Dialog_Partition_New.cc:
      328  void Dialog_Partition_New::combobox_changed(bool type)
      329  {
      ...
      351      // combo_filesystem and combo_alignment
      352      if ( ! type )
      353      {
    > 354          fs = FILESYSTEMS[combo_filesystem.get_active_row_number()];
    
    When the partition type is changed to Extended the file system is forced
    to be "Extended" too.  This is done in ::combobox_changed() method by
    modifying combo_filesystem to add "Extended", making that the selected
    item and setting the widget as inactive.
    
    Then when the partition type is changed back to primary the file system
    combobox is returned to it's previous state.  This is done by first
    removing the last "Extended" item, making the widget active and setting
    the selected item.  However as "Extended" is the currently selected
    item, removing it forces their to be no selected item and triggers a
    change to combo_filesystem triggering a recursive call to
    ::combobox_changed() where combo_filesystem.get_active_row_number()
    returns -1 (no selection) [5] and on line 354 the code accesses item -1
    of the FILESYSTEMS[] vector.
    
    Fix by setting the new combo_filesystem selection before removing the
    currently selected "Extended" item.  This has the added benefit of only
    triggering a change to combo_filesystem once when the default item is
    selected rather than twice when the currently "Extended" item is removed
    and again when the default item is selected.
    
    [1] [Fedora] Security Features, Compile Time Buffer Checks
        (FORTIFY_SOURCE)
        https://fedoraproject.org/wiki/Security_Features#Compile_Time_Buffer_Checks_.28FORTIFY_SOURCE.29
    
    [2] Enhance application security with FORTIFY_SOURCE
        https://access.redhat.com/blogs/766093/posts/1976213
    
    [3] Security Features Matrix (GLIBXX_Assertions)
        https://fedoraproject.org/wiki/Security_Features_Matrix
    
    [4] GParted 1.2.0-1.fc33 package build.log for Fedora 33
        https://kojipkgs.fedoraproject.org/packages/gparted/1.2.0/1.fc33/data/logs/x86_64/build.log
        CXXFLAGS='-O2 -g ... -Wp,-D_FORTIFY_SOURCE=2
        -Wp,-D_GLIBCXX_ASSERTIONS ...'
    
    [5] gtkmm: Gtk::ComboBox Class Reference, get_active_row_number()
        https://developer.gnome.org/gtkmm/stable/classGtk_1_1ComboBox.html#a53531bc041b5a460826babb8496c363b
    
    Closes #101 - Crash changing Partition type in "Create new partition"
                  dialog

2021-02-20  Yuri Chornoivan <yurchor@ukr.net>

    Fix minor typos in comments (!71)
    
    Closes !71 - Fix minor typos in comments

2021-02-23  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2021-02-22  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2021-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update SystemRescue name and URL in the GParted Manual
    
    SystemRescue have dropped CD from their name and URL.  Update the
    GParted Manual to reflect this.

2021-02-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Re-enable PipeCapture read NUL byte unit tests in GitLab CI jobs (#136)
    
    This reverts commit:
        e9223207e6b5224259716f05f84f80ca426acc42.
        Exclude PipeCapture read NUL byte unit tests in GitLab CI jobs (!60)
    now that PipeCapture has been fixed to read NUL characters again.
    
    Closes #136 - 1.2.0: test suite is failing in test_PipeCapture

2021-02-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Accept NUL as a valid UTF-8 character again (#136)
    
    On newer distributions the PipeCapture tests have been failing like
    this:
        $ ./test_PipeCapture
        ...
        [ RUN      ] PipeCaptureTest.ReadEmbeddedNULCharacter
        test_PipeCapture.cc:336: Failure
              Expected: inputstr
             Of length: 6
        To be equal to: capturedstr.raw()
             Of length: 5
        With first binary difference:
        < 0x00000000  "ABC.EF"            41 42 43 00 45 46
        --
        > 0x00000000  "ABCEF"             41 42 43 45 46
        [  FAILED  ] PipeCaptureTest.ReadEmbeddedNULCharacter (0 ms)
        [ RUN      ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character
        test_PipeCapture.cc:353: Failure
              Expected: expectedstr
             Of length: 7
        To be equal to: capturedstr.raw()
             Of length: 6
        With first binary difference:
        < 0x00000000  "._45678"           00 5F 34 35 36 37 38
        --
        > 0x00000000  "_45678"            5F 34 35 36 37 38
        [  FAILED  ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character (0 ms)
        ...
    
    Found that test_PipeCapture succeeds on Fedora 31 and fails on
    Fedora 32.  Also test_PipeCapture binary from Fedora 31 and 32 both pass
    on Fedora 31 and both fail on Fedora 32.  So something outside of the
    GParted code and tests is the cause.
    
    Confirmed that this GLib change "Add a missing check to
    g_utf8_get_char_validated()" [1], first released in GLib 2.63.0, made
    the difference.  On Fedora 32 with GLib 2.64.6, rebuilt GLib with that
    change reverted and the tests passed.  Anyway fix the wrapper GParted
    has around g_utf8_get_char_validated() to also handle this case of
    reading a NUL character.
    
    [1] https://gitlab.gnome.org/GNOME/glib/-/commit/568720006cd1da3390c239915337ed0a56a23f2e
        Add a missing check to g_utf8_get_char_validated()
    
    Closes #136 - 1.2.0: test suite is failing in test_PipeCapture

2021-02-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor ::OnReadable() creating get_utf8_char_validated() (#136)
    
    Extract call to GLib's g_utf8_get_char_validated() and the associated
    workaround to also read NUL characters into a separate function to make
    PipeCapture::OnReadable() a little smaller and simpler, so easier to
    understand.
    
    Add max_len > 0 clause into get_utf8_char_validated() like this:
        if (uc == UTF8_PARTIAL && max_len > 0)
    so that the NUL character reading workaround is only applied when
    max_len specifies the maximum number of bytes to read, rather than
    when -1 specifies reading a NUL termination string.  This makes
    get_utf8_char_validated() a complete wrapper of
    g_utf8_get_char_validated() [1], even though GParted always specifies
    the maximum number of bytes to read.
    
    No longer describe the inability to read NUL characters as a bug [2]
    since the GLib author's said it wasn't [3].
    
    [1] GLib Reference Manual, Unicode Manipulation Functions,
        g_utf8_get_char_validated ()
        https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-get-char-validated
    
    [2] 8dbbb47ce2db0ee733ff909c1ead2f4de9475596
        Workaround g_utf8_get_char_validate() bug with embedded NUL bytes
        (#777973)
    
    [3] Bug 780095 - g_utf8_get_char_validated() stopping at nul byte even
        for length specified buffers
        https://bugzilla.gnome.org/show_bug.cgi?id=780095#18
            "If g_utf8_get_char_validated() encounters a nul byte in the
            middle of a string of given longer length, it returns -2,
            indicating a partial gunichar.  That is not the obvious
            behaviour, but since g_utf8_get_char_validated() has been API
            for a long time, the behaviour cannot be changed.
            "
    
    Closes #136 - 1.2.0: test suite is failing in test_PipeCapture

2021-02-18  Yuri Chornoivan <yurchor@ukr.net>

    Add Ukrainian screenshot (!70)
    
    Closes !70 - Add Ukrainian screenshot

2021-02-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename SupportedFileSystemsTest method to create_image_file()
    
    ... from extra_setup() to provide a more meaningful description of what
    it does.

2021-02-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update allow partition deletion comment in set_valid_operations()
    
    This previous commit [1] suggested that in future partition deletion
    might be allowed even while a LUKS mapping was active in that partition.
    To allow deletion of a partition while it has active content is wrong.
    That is a significant reason GParted has busy detection of otherwise
    unrecognised file systems [2] and recognition and busy detection of, but
    otherwise not controllable support for, Linux Software RAID [3] and
    ATARAID [4][5] arrays.
    
    To automatically close the LUKS partition first would be against the
    pattern of behaviour that GParted has established, of requiring explicit
    deactivation of file systems, swap and volume groups before allowing
    deletion.  Therefore update the comment accordingly.
    
    [1] f1e3d42b5604d93dc954f5f218ef489649f11284
        Prevent deletion of open LUKS mappings (#774818)
    
    [2] 49a2e19462fdbe4b28a53cc21a2ddd29d256ff41
        Restore busy detection of unknown mounted file systems (#723842)
    
    [3] d2e1130ad22eb3f52db4dc7f645ed4d5bf119d24
        Detect busy status of Linux Software RAID members (#709640)
    
    [4] 6e990ea48ad4177fbf1a26b5f6d9dd60b218874d
        Detect busy status of mdadm started ATARAID members (#75)
    
    [5] caec22871e2fa869db85831c625f30d70738906e
        Detect busy status of dmraid started ATARAID members (#75)

2021-02-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add support for updating the exFAT UUID (!67)
    
    Also with exfatprogs 1.1.0 [1], tune.exfat and exfatlabel gained the
    capability to report and set the exFAT Volume Serial Number [2][3][4].
    This is what blkid and therefore GParted reports as the UUID.
    
    Report serial number:
    
        # tune.exfat -i /dev/sdb1
        exfatprogs version : 1.1.0
        volume serial : 0x772ffe5d
        # echo $?
        0
    
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="test exfat" UUID="772F-FE5D" TYPE="exfat" PTTYPE="dos"
    
    Set serial number:
    
        # tune.exfat -I 0xf96ef190 /dev/sdb1
        exfatprogs version : 1.1.0
        New volume serial : 0xf96ef190
        # echo $?
        0
    
    tune.exfat exists in earlier releases of exfatprogs so check it has the
    capability by searching for "Set volume serial" in the help output
    before enabling this capability.
    
        # tune.exfat
        exfatprogs version : 1.1.0
        Usage: tune.exfat
                -l | --print-label                    Print volume label
                -L | --set-label=label                Set volume label
                -i | --print-serial                   Print volume serial
                -L | --set-serial=value               Set volume serial
                -V | --version                        Show version
                -v | --verbose                        Print debug
                -h | --help                           Show help
    
    (Note the cut and paste error reporting the set volume serial flag as
    '-L' rather than actually '-S').
    
    [1] exfatprogs-1.1.0 version released
        http://github.com/exfaoprogs/exfatprogs/releases/tag/1.1.0
    
    [2] [tools][feature request] Allow To Change Volume Serial Number ("ID")
        #138
        https://github.com/exfatprogs/exfatprogs/issues/138
    
    [3] exfatlabel:add get/set volume serial option
        https://github.com/exfatprogs/exfatprogs/commit/b4d9c9eeb5c28b503e103e2c4ec22bc146446d9f
    
    [4] exFAT file system specification, 3.1.11 VolumeSerialNumber Field
        https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification#3111-volumeserialnumber-field
    
    Closes !67 - Add support for reading exFAT usage and updating the UUID

2021-02-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add exFAT file system usage reporting (!67)
    
    exfatprogs 1.1.0 released 2021-02-09 [1] has gained support for
    reporting file system usage [2][3] so add that capability to GParted.
    It works like this:
    
        # dump.exfat /dev/sdb1 | egrep 'Volume Length\(sectors\):|Sector Size Bits:|Sector per Cluster bits:|Free Clusters:'
        Volume Length(sectors):                 524288
        Sector Size Bits:                       9
        Sector per Cluster bits:                3
        Free Clusters:                          23585
    
    Unfortunately dump.exfat returns a non-zero status on success so that
    can't be used to check for failure:
    
        # dump.exfat /dev/sdb1
        exfatprogs version : 1.1.0
        -------------- Dump Boot sector region --------------
        Volume Length(sectors):                 524288
        ...
        # echo $?
        192
    
    dump.exfat only writes errors to stderr, so use this to identify failure:
    
        # dump.exfat /dev/sdb1 1> /dev/null
        # echo $?
        192
    
        # dump.exfat /dev/zero 1> /dev/null
        invalid block device size(/dev/zero)
        bogus sector size bits : 0
        # echo $?
        234
    
    [1] exfatprogs-1.1.0 version released
        http://github.com/exfaoprogs/exfatprogs/releases/tag/1.1.0
    
    [2] [feature request] File system usage reporting
        https://github.com/exfatprogs/exfatprogs/issues/139
    
    [3] exfatprogs: add dump.exfat
        https://github.com/exfatprogs/exfatprogs/commit/7ce9b2336b06e76521f7e041d8f0712b2d98a15b
    
    Closes !67 - Add support for reading exFAT usage and updating the UUID

2021-02-16  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2021-02-16  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2021-02-15  Yuri Chornoivan <yurchor@ukr.net>

    Add Ukrainian translation of docs (!69)
    
    Closes !69 - Add Ukrainian translation of docs

2021-02-15  Yuri Chornoivan <yurchor@ukr.net>

    Fix minor typos in docs (!68)
    
    Closes !68 - Fix minor typos in docs

2021-02-15  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2021-02-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid detecting exfat-utils commands as exfatprogs commands (#137)
    
    A user had exfat-utils installed and tried to use GParted to create an
    exfat file system.  GParted ran this command but it failed:
        # mkfs.exfat -L '' '/dev/sdb1'
        mkexfatfs 1.3.0
        mkfs.exfat: invalid option -- 'L'
        Usage: mkfs.exfat [-i volume-id] [-n label] [-p partition-first-sector] [-s sectors-per-cluster] [-V] <device>
    
    The problem is that both exfat-utils and exfatprogs packages provide
    mkfs.exfat and fsck.exfat commands but they have incompatible command
    line options and GParted is programmed for exfatprogs.  So far GParted
    just checks the executable exists, hence the mis-identification.
    
    Reported version of exfat-utils commands:
        $ mkfs.exfat -V 2> /dev/null
        mkexfatfs 1.3.0
        Copyright (C) 2011-2018  Andrew Nayenko
        $ fsck.exfat -V 2> /dev/null
        exfatfsck 1.3.0
        Copyright (C) 2011-2018  Andrew Nayenko
    
    Reported versions of exfatprogs commands:
        $ mkfs.exfat -V 2> /dev/null
        exfatprogs version : 1.0.4
        $ fsck.exfat -V 2> /dev/null
        exfatprogs version : 1.0.4
    
    Fix this by only enabling exfat support also when the version string of
    each command starts "exfatprogs version".  Note that this extra checking
    is not needed for tune.exfat because only exfatprogs provides that
    executable.
    
    Closes #137 - Creating exfat partition with a label fails with error

2021-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make gparted shell wrapper report exit status from gpartedbin
    
    gparted shell wrapper always exits with a 0 status even if gpartedbin
    fails.  For example make gpartedbin fail with a non-zero exit status
    like this:
        $ (unset DISPLAY; unset XAUTHORITY; /usr/sbin/gpartedbin)
    
        (gpartedbin:3936): Gtk-WARNING **: 16:36:06.263: cannot open display:
        $ echo $?
        1
    
    However the gparted shell wrapper instead exits with successful status
    0:
        $ (unset DISPLAY; unset XAUTHORITY; gparted)
    
        (gpartedbin:4282): Gtk-WARNING **: 16:39:23.514: cannot open display:
        $ echo $?
        0
    
    Fix this.

2020-01-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace Win_GParted::hbox member with local variables
    
    hbox is a very generic name for a member variable and used as a local
    variable in two methods.  Change to local variables instead.

2021-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now unused return value from run_blkid_load_cache() (#131)
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now superfluous load_fs_info_cache() (#131)
    
    This method is now only called from one location in the code so put it's
    two lines of code there.
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure FS_Info (blkid) cache is populated before first use (#131)
    
    Now we always want to run blkid naming all paths, ensure the FS_Info
    cache is explicitly loaded first.  Report an error if not done so and
    remove the cache loading code from running blkid without naming all
    paths.  Fewer code paths to consider and reason about.
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove extra execution of blkid for any unreported paths (#131)
    
    Again on Fedora 31 with a slightly different disk layout to the previous
    commit.  sdb is partitioned with 1 empty partition and sdc remains
    completely empty:
        # lsblk -o name,maj:min,rm,size,ro,type,fstype,label,mountpoint
        NAME            MAJ:MIN RM  SIZE RO TYPE FSTYPE      LABEL MOUNTPOINT
        sda               8:0    0   20G  0 disk
        |-sda1            8:1    0    1G  0 part ext4              /boot
        \-sda2            8:2    0   19G  0 part LVM2_member
          |-fedora-root 253:0    0   17G  0 lvm  ext4              /
          \-fedora-swap 253:1    0    2G  0 lvm  swap              [SWAP]
        sdb               8:16   0    8G  0 disk
        \-sdb1            8:17   0    1G  0 part
        sdc               8:32   0    8G  0 disk
        sr0              11:0    1 1024M  0 rom
        # blkid -v
        blkid from util-linux 2.34  (libblkid 2.34.0, 14-Jun-2019)
        # blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdc
        /dev/sda: PTUUID="5012fb1f" PTTYPE="dos"
        /dev/sda1: UUID="3cd48816-7817-4636-9fec-5f1afe76c1b2" TYPE="ext4" PARTUUID="5012fb1f-01"
        /dev/sda2: UUID="PH94ej-C8xU-bnMJ-UIh8-ZimI-4B7f-dHlZxh" TYPE="LVM2_member" PARTUUID="5012fb1f-02"
        /dev/sdb: PTUUID="1d120b57" PTTYPE="dos"
        /dev/sdb1: PARTUUID="1d120b57-01"
    
    Stracing GParted shows these executions of blkid:
        # strace -f -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | egrep -v 'ENOENT|SIGCHLD'
        ...
        [pid 160040] execve("/usr/sbin/blkid", ["blkid", "/dev/sda", "/dev/sda1", "/dev/sda2", "/dev/sdb", "/dev/sdb1", "/dev/sdc"], 0xa4e1b0 /* 32 vars */ <detached ...>
        [pid 160041] execve("/usr/sbin/blkid", ["blkid", "/dev/sdc"], 0xa4e1b0 /* 32 vars */ <detached ...>
        ...
    
    On Fedora 31 with blkid from util-linux 2.34 it reports information for
    sdb (partitioned drive) and sdb1 (empty partition) with only no
    information for sdc (empty whole disk drive).  Hence no FS_Info cache
    entry and re-execution of blkid just for sdc.
    
    On older CentOS 7 with the same disk layout blkid reports this:
        # blkid -v
        blkid from util-linux 2.23.2  (libblkid 2.23.0, 25-Apr-2013)
        # blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdc
        /dev/sda: PTTYPE="dos"
        /dev/sda1: UUID="e7d559e4-3e1d-4fbc-b034-3fdeb498f44d" TYPE="xfs"
        /dev/sda2: UUID="B7ODFx-BfTE-hq7N-UlrF-f5ML-CPRe-klSy26" TYPE="LVM2_member"
        /dev/sdb: PTTYPE="dos"
    
    And stracing GParted shows these executions of blkid:
        # strace -f -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | egrep -v 'ENOENT|SIGCHLD'
        ...
        [pid  1889] execve("/sbin/blkid", ["blkid", "/dev/sda", "/dev/sda1", "/dev/sda2", "/dev/sdb", "/dev/sdb1", "/dev/sdc"], 0x10b8b10 /* 26 vars */ <detached ...>
        [pid  1890] execve("/sbin/blkid", ["blkid", "/dev/sdb1"], 0x10b8b10 /* 26 vars */ <detached ...>
        [pid  1891] execve("/sbin/blkid", ["blkid", "/dev/sdc"], 0x10b8b10 /* 26 vars */ <detached ...>
    ...
    
    This time on CentOS 7 with blkid from util-linux 2.23.2 it reports
    information for only sdb (partitioned drive), but not sdb1 (empty
    partition) or sdc (empty whole disk drive).  Hence no FS_info cache
    entries and re-execution of blkid for both sdb1 and sdc.
    
    GParted needs blkid identification of file system images, LVM Logical
    Volumes or any other partitions named on the command line which it
    wouldn't normally scan [1].  Now every name of interest is passed to
    blkid, additional executions of blkid won't get any extra information
    and are redundant.  Therefore remove this unnecessary code.
    
    Note that these last 2 commits remove creation of "blank" cache entries
    (just block special with blank fstype and other attributes) when blkid
    reports no information for a particular path.  Those entry were needed
    to suppress unnecessary additional execution of blkid.  However now that
    blkid is only executed once (excluding querying the label) this is no
    longer necessary.  All the getter functions return suitable blank values
    when no cache entry is found.
    
    [1] e8f0504b13d98e23e70021f70638184daab228ec
        Make sure that FS_Info cache is loaded for all named paths (#787181)
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove extra execution of blkid for whole disk devices (#131)
    
    On Fedora 31 with this simple disk layout where both sdb and sdc are
    completely empty:
        # lsblk -o name,maj:min,rm,size,ro,type,fstype,label,mountpoint
        NAME            MAJ:MIN RM  SIZE RO TYPE FSTYPE      LABEL MOUNTPOINT
        sda               8:0    0   20G  0 disk
        |-sda1            8:1    0    1G  0 part ext4              /boot
        \-sda2            8:2    0   19G  0 part LVM2_member
          |-fedora-root 253:0    0   17G  0 lvm  ext4              /
          \-fedora-swap 253:1    0    2G  0 lvm  swap              [SWAP]
        sdb               8:16   0    8G  0 disk
        sdc               8:32   0    8G  0 disk
        sr0              11:0    1 1024M  0 rom
        # blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
        /dev/sda: PTUUID="5012fb1f" PTTYPE="dos"
        /dev/sda1: UUID="3cd48816-7817-4636-9fec-5f1afe76c1b2" TYPE="ext4" PARTUUID="5012fb1f-01"
        /dev/sda2: UUID="PH94ej-C8xU-bnMJ-UIh8-ZimI-4B7f-dHlZxh" TYPE="LVM2_member" PARTUUID="5012fb1f-02"
    
    Stracing GParted shows extra executions of blkid:
        # strace -f -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | egrep -v 'ENOENT|SIGCHLD'
        ...
        [pid  7659] execve("/usr/sbin/blkid", ["blkid", "/dev/sda", "/dev/sda1", "/dev/sda2", "/dev/sdb", "/dev/sdc"], 0x1d300f0 /* 32 vars */ <detached ...>
        [pid  7660] execve("/usr/sbin/blkid", ["blkid", "/dev/sdb"], 0x1d300f0 /* 32 vars */ <detached ...>
        [pid  7661] execve("/usr/sbin/blkid", ["blkid", "/dev/sdc"], 0x1d300f0 /* 32 vars */ <detached ...>
        ...
    
    blkid is only run again for sdb and sdc, not sda, because blkid didn't
    report anything for them from the first execution.  GParted needs blkid
    identification of whole disk devices to ensure that ISO9660 images on
    whole disk devices are correctly identified [1].  Now the first run of
    blkid passes all the device names, so this additional execution of blkid
    won't get any extra information and is redundant.  Therefore remove this
    unnecessary code.
    
    [1] b2190372d04f09bd38a7395b38e43034f1733d81
        Ensure blkid FS_Info cache has entries for all whole disk devices
        (#771244)
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass device and partition names to blkid (#131)
    
    A user reported that GParted would hang at "scanning all devices...",
    when a fully working disk was named on the command line, but another
    device on the machine was hung.
    
    This can be replicated like this:
    (on Ubuntu 20.04 LTS for it's NBD support)
    
    1. Export and import NBD:
        # truncate -s 1G /tmp/disk-1G.img
        # nbd-server -C /dev/null 9000 /tmp/disk-1G.img
        # nbd-client localhost 9000 /dev/nbd0
    
    2. Hang the NBD server and therefore /dev/nbd0:
        # killall -STOP nbd-server
    
    3. Run GParted:
        $ gparted /dev/sda
    
    Tracing GParted shows that execution of blkid never returns.
    
        # strace -f -tt -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | fgrep -v ENOENT
        ...
        [pid 37823] 13:56:24.814139 execve("/usr/sbin/mkudffs", ["mkudffs", "--help"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
        [pid 37814] 13:56:24.829246 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=37823, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
        [pid 37825] 13:56:25.376796 execve("/usr/sbin/blkid", ["blkid", "-v"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
        [pid 37824] 13:56:25.380824 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=37825, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
        [pid 37826] 13:56:25.402512 execve("/usr/sbin/blkid", ["blkid"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
    
    Tracking of blkid shows that it hangs on either the open of or first
    read from /dev/nbd0.
    
        # strace blkid
        ...
        lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
        lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
        lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        access("/dev/nbd0", F_OK)               = 0
        stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        openat(AT_FDCWD, "/sys/dev/block/43:0", O_RDONLY|O_CLOEXEC) = 4
        openat(4, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        close(4)                                = 0
        openat(AT_FDCWD, "/dev/nbd0", O_RDONLY|O_CLOEXEC
    
    Clean up:
    
    1. Resume NBD server:
        # killall -CONT nbd-server
    
    2. Delete NBD setup:
        # nbd-client -d /dev/nbd0
        # killall nbd-server
        # rm /tmp/disk-1G.img
    
    Fix this by making GParted specify the whole disk device and partition
    names that it is interested in to blkid, rather than letting blkid scan
    and report all block devices.  Do this both when GParted determines the
    devices for itself and when they are named on the command line.
    
    Also update example blkid command output being parsed and cache value
    with this change to how blkid is executed.
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor run_blkid_load_cache() into if fail return early (#131)
    
    ... code pattern.  Simplifies the code a little.
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Read partition names from /proc/partitions too (#131)
    
    GParted already always reads /proc/partitions for whole disk device
    names no matter whether it uses whole disk devices named on the command
    line, from /proc/partitions or from libparted.  As /proc/partitions
    lists all the block devices that the kernel knows about, and therefore
    all the possible ones blkid could probe, so use it to provide partition
    names and device to partition mapping.  See code comments for more
    details about the assumptions the /proc/partition parsing code makes and
    the fact that these are confirmed by examining the Linux kernel source.
    
    This commit just adds debugging to print the existing vector of
    validated devices GParted shows in the UI and the vector with all
    partitions added, ready for but not yet passed to blkid.
        # ./gpartedbin
        ...
        DEBUG: device_paths=["/dev/sda","/dev/sdb"]
        DEBUG: device_and_partition_paths=["/dev/sda","/dev/sda1","/dev/sda2","/dev/sdb","/dev/sdb1"]
    
    Also demonstrating that this continues to support named devices,
    including file system image files [1].
        # truncate -s 256M /tmp/ext4.img
        # mkfs.ext4 /tmp/ext4.img
        # ./gpartedbin /dev/sda /tmp/ext4.img
        ...
        DEBUG: device_paths=["/dev/sda","/tmp/ext4.img"]
        DEBUG: device_and_partition_paths=["/dev/sda","/dev/sda1","/dev/sda2","/tmp/ext4.img"]
    
    [1] e8f0504b13d98e23e70021f70638184daab228ec
        Make sure that FS_Info cache is loaded for all named paths (#787181)
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor load_proc_partitions_info_cache() a bit (#131)
    
    Put whole disk device name matching code into a helper function to make
    the /proc/partition parsing code easier to understand.
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Merge FS_Info load cache calls (#131)
    
    Now FS_Info::load_cache() and ::load_cache_for_paths() are nearly next
    to each other, merge them together to simplify the code a little.  This
    makes the special case to ensure that file system images named on the
    command line were queried by blkid and loaded into the FS_Info cache [1]
    become the normal cache loading method.  Already passing all discovered
    or named devices to load_cache_for_paths() is also a step on the way to
    doing it for all devices and partitions of interest.
    
    Just need to ensure that load_cache_for_paths() always loads the cache
    as load_cache() did, rather than only when it hadn't already been
    loaded.  Otherwise GParted will only ever run blkid and load the cache
    once at startup and not on each refresh.
    
    [1] e8f0504b13d98e23e70021f70638184daab228ec
        Make sure that FS_Info cache is loaded for all named paths (#787181)
    
    Closes #131 - GParted hangs when non-named device is hung

2021-01-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Initialise partition content discovery caches a bit later (#131)
    
    PATCHSET OVERVIEW
    
    A user reported that GParted would hang at "scanning all devices...",
    when a fully working disk was named on the command line, but another
    device on the machine was hung.
    
    This can be replicated like this:
    (on Ubuntu 20.04 LTS for it's NBD support)
    
    1. Export and import NBD:
        # truncate -s 1G /tmp/disk-1G.img
        # nbd-server -C /dev/null 9000 /tmp/disk-1G.img
        # nbd-client localhost 9000 /dev/nbd0
    
    2. Hang the NBD server and therefore /dev/nbd0:
        # killall -STOP nbd-server
    
    3. Run GParted:
        $ gparted /dev/sda
    
    Tracing GParted shows that execution of blkid never returns.
    
        # strace -f -tt -q -bexecve -eexecve /usr/sbin/gpartedbin 2>&1 1> /dev/null | fgrep -v ENOENT
        ...
        [pid 37823] 13:56:24.814139 execve("/usr/sbin/mkudffs", ["mkudffs", "--help"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
        [pid 37814] 13:56:24.829246 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=37823, si_uid=0, si_status=1, si_utime=0, si_stime=0} ---
        [pid 37825] 13:56:25.376796 execve("/usr/sbin/blkid", ["blkid", "-v"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
        [pid 37824] 13:56:25.380824 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=37825, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
        [pid 37826] 13:56:25.402512 execve("/usr/sbin/blkid", ["blkid"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
    
    Tracing of blkid shows that it hangs on either the open of or first
    read from /dev/nbd0.
    
        # strace blkid
        ...
        lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
        lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
        lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        access("/dev/nbd0", F_OK)               = 0
        stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
        openat(AT_FDCWD, "/sys/dev/block/43:0", O_RDONLY|O_CLOEXEC) = 4
        openat(4, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        close(4)                                = 0
        openat(AT_FDCWD, "/dev/nbd0", O_RDONLY|O_CLOEXEC
    
    Clean up:
    
    1. Resume NBD server:
        # killall -CONT nbd-server
    
    2. Delete NBD setup:
        # nbd-client -d /dev/nbd0
        # killall nbd-server
        # rm /tmp/disk-1G.img
    
    Going to fix this by making GParted specify the device and partition
    names that it is interested in to blkid, rather than letting blkid scan
    and report all block devices.  Do this both when GParted determines the
    devices for itself and when they are named on the command line.
    
    THIS PATCH
    
    Move the loading and initialising of caches used during content
    discovery to after device and partition discovery and just before
    content discovery.  Just makes the code ready for the next change.
    
    Closes #131 - GParted hangs when non-named device is hung

2021-02-06  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2021-01-25  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2021-01-25  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.2.0   ==========

2021-01-25  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2021-01-24  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>

    Update Latvian translation

2021-01-23  Fabio Tomat <f.t.public@gmail.com>

    Update Friulian translation

2021-01-22  Philipp Kiemle <philipp.kiemle@gmail.com>

    Update German translation

2021-01-21  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2021-01-20  Thibault Martin <mail@thibaultmart.in>

    Update French translation

2021-01-19  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Update Serbian translation

2021-01-19  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2021-01-18  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2021-01-18  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2021-01-18  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2021-01-17  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2021-01-16  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2021-01-16  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2021-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space tidy-up of Utils::get_filesystem_software()
    
    Put colon directly after case value and list cases in enumeration order.

2021-01-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit testing of GParted exFAT interface (!30)
    
    Install exfatprogs into the CentOS 7 GitLab CI image, enabling unit
    testing of GParted's use of exFAT programs.  Exfatprogs is not yet
    available for Ubuntu 20.04 as used in the Ubuntu GitLab CI image, only
    for Ubuntu 20.10 so far.
    
    Closes !30 - Add exFAT support

2021-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set the partition type for exFAT correctly (!30)
    
    Libparted only allows selection of the partition type indirectly by
    specifying the type of the file system it will contain [1] and so far
    doesn't know about the exFAT file system.  Therefore when GParted is
    creating a new exFAT partition, it gets the GParted default of 83
    (Linux file system) on MBR partition tables.
    
    Example operation details:
        Create Primary Partition #1 (exfat, 512.00 MiB) on /dev/sdb
        * create empty partition
        * clear old file system signatures in /dev/sdb1
        * set partition type on /dev/sdb1
            new partition type: ext2
        * create new exfat file system
    
    fdisk report:
        # fdisk -l /dev/sdb
        Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 sectors
        Disk model: VBOX HARDDISK
        Units: sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disklabel type: dos
        Disk identifier: 0xa2aab629
    
        Device     Boot Start     End Sectors  Size Id Type
        /dev/sdb1        2048 1050623 1048576  512M 83 Linux
    
    However the "exFAT file system specification" says:
        https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification
        "10.2 Partition Tables
    
        To ensure interoperability of exFAT volumes in a broad set of usage
        scenarios, implementations should use partition type 07h for MBR
        partitioned storage and partition GUID
        {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} for GPT partitioned storage.
        "
    
    Fix this.
    
    [1] ped_partition_new(..., const PedFileSystemType* fs_type, ...)
        https://www.gnu.org/software/parted/api/group__PedPartition.html#g2f94ca75880f9e0c3ce57f7a4b72faf5
        ped_partition_set_system(..., const PedFileSystemType* fs_type)
        https://www.gnu.org/software/parted/api/group__PedPartition.html#g2f94ca75880f9e0c3ce57f7a4b72faf5
    
    Closes !30 - Add exFAT support

2021-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add exFAT support (!30)
    
    With exfatprogs (https://github.com/exfatprogs/exfatprogs) installed the
    following operations on exFAT file systems are supported:
    - Creation
    - Checking
    - Labelling
    As of the current exfatprogs 1.0.4 the following are not supported:
    - Reading usage
    - Resizing
    - Updating the UUID
    
    Closes !30 - Add exFAT support

2021-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Exclude snap /dev/loop file system image mounts (#129)
    
    On Ubuntu the gparted shell wrapper still attempts to mask lots of
    non-block device based file systems.  Remove the --quiet option from the
    systemctl --runtime mask command to see:
        $ gparted
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d34\x2d1804-66.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core-10583.mount -> /dev/null.
        Created symlink /run/systemd/system/boot-efi.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gtk\x2dcommon\x2dthemes-1514.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core-10577.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core18-1944.mount -> /dev/null.
        Created symlink /run/systemd/system/run-user-1000-doc.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gtk\x2dcommon\x2dthemes-1506.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d28\x2d1804-128.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-snap\x2dstore-518.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d28\x2d1804-145.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-core18-1932.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-snap\x2dstore-467.mount -> /dev/null.
        Created symlink /run/systemd/system/snap-gnome\x2d3\x2d34\x2d1804-60.mount -> /dev/null.
        Created symlink /run/systemd/system/-.mount -> /dev/null.
        GParted 1.0.0
        configuration --enable-libparted-dmraid --enable-online-resize
        libparted 3.3
    
    The gparted shell wrapper is currently looking for non-masked Systemd
    mount units where the 'What' property starts "/dev/".  However Ubuntu
    also uses snap packages which are mounted file images via loop devices:
        $ grep '^/dev/' /proc/mounts | sort
        /dev/fuse /run/user/1000/doc fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
        /dev/loop0 /snap/core/10583 squashfs ro,nodev,relatime 0 0
        /dev/loop10 /snap/snap-store/518 squashfs ro,nodev,relatime 0 0
        /dev/loop11 /snap/snap-store/467 squashfs ro,nodev,relatime 0 0
        /dev/loop12 /snap/gtk-common-themes/1506 squashfs ro,nodev,relatime 0 0
        /dev/loop1 /snap/core/10577 squashfs ro,nodev,relatime 0 0
        /dev/loop3 /snap/core18/1944 squashfs ro,nodev,relatime 0 0
        /dev/loop4 /snap/core18/1932 squashfs ro,nodev,relatime 0 0
        /dev/loop5 /snap/gnome-3-34-1804/66 squashfs ro,nodev,relatime 0 0
        /dev/loop6 /snap/gnome-3-28-1804/128 squashfs ro,nodev,relatime 0 0
        /dev/loop7 /snap/gnome-3-34-1804/60 squashfs ro,nodev,relatime 0 0
        /dev/loop8 /snap/gnome-3-28-1804/145 squashfs ro,nodev,relatime 0 0
        /dev/loop9 /snap/gtk-common-themes/1514 squashfs ro,nodev,relatime 0 0
        /dev/sda1 /boot/efi vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
        /dev/sda5 / ext4 rw,relatime,errors=remount-ro 0 0
    
    Fix by excluding:
    1. Device name "/dev/fuse" because it's a character not a block device
       and the mount point is associated with snap,
    2. Device names starting "/dev/loop" and where the mount point starts
       "/snap/" [1].  This is to allow for use of GParted with explicitly
       named loop devices.
    
    [1] The system /snap directory
        https://snapcraft.io/docs/system-snap-directory
    
    Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
                  anyway

2021-01-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only mask Systemd mounts on block devices (#129)
    
    The gparted shell wrapper masks Systemd mount units to prevent it
    automounting file systems while GParted is running [1], excluding
    virtual file system which GParted isn't interested in [2].  The problem
    is that there are a lot of virtual file systems and they have changed
    between Fedora 19 and 33 so now the exclusion list is out of date.
    
    Run GParted on Fedora 33 and query the mount units while it is running:
        $ systemctl list-units -t mount --full --all
          UNIT                          LOAD   ACTIVE   SUB     DESCRIPTION
          -.mount                       loaded active   mounted Root Mount
        * boot.mount                    masked active   mounted /boot
          dev-hugepages.mount           loaded active   mounted Huge Pages File System
          dev-mqueue.mount              loaded active   mounted POSIX Message Queue File System
        * home.mount                    masked active   mounted /home
        * proc-fs-nfsd.mount            masked inactive dead    proc-fs-nfsd.mount
          proc-sys-fs-binfmt_misc.mount loaded inactive dead    Arbitrary Executable File Formats File System
          run-user-1000-gvfs.mount      loaded active   mounted /run/user/1000/gvfs
        * run-user-1000.mount           masked active   mounted /run/user/1000
        * run-user-42.mount             masked active   mounted /run/user/42
          sys-fs-fuse-connections.mount loaded active   mounted FUSE Control File System
          sys-kernel-config.mount       loaded active   mounted Kernel Configuration File System
          sys-kernel-debug.mount        loaded active   mounted Kernel Debug File System
        * sys-kernel-tracing.mount      masked active   mounted /sys/kernel/tracing
        * sysroot.mount                 masked inactive dead    sysroot.mount
        * tmp.mount                     masked active   mounted /tmp
        * var-lib-machines.mount        masked inactive dead    var-lib-machines.mount
        * var-lib-nfs-rpc_pipefs.mount  masked active   mounted /var/lib/nfs/rpc_pipefs
        * var.mount                     masked inactive dead    var.mount
    
        LOAD   = Reflects whether the unit definition was properly loaded.
        ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
        SUB    = The low-level unit activation state, values depend on unit type.
    
        19 loaded units listed.
        To show all installed unit files use 'systemctl list-unit-files'.
    
    So it masked these virtual file systems which didn't need to be masked:
        * proc-fs-nfsd.mount            masked inactive dead    proc-fs-nfsd.mount
        * run-user-1000.mount           masked active   mounted /run/user/1000
        * run-user-42.mount             masked active   mounted /run/user/42
        * sys-kernel-tracing.mount      masked active   mounted /sys/kernel/tracing
        * var-lib-machines.mount        masked inactive dead    var-lib-machines.mount
        * var-lib-nfs-rpc_pipefs.mount  masked active   mounted /var/lib/nfs/rpc_pipefs
    
    Lines from /proc/partitions for some of these virtual file systems:
        $  egrep '/run/user|/sys/kernel/tracing|/var/lib/nfs/rpc_pipefs' /proc/mounts
        tmpfs /run/user/42 tmpfs rw,seclabel,nosuid,nodev,relatime,size=202656k,nr_inodes=50664,mode=700,uid=42,gid=42,inode64 0 0
        tmpfs /run/user/1000 tmpfs rw,seclabel,nosuid,nodev,relatime,size=202656k,nr_inodes=50664,mode=700,uid=1000,gid=1000,inode64 0 0
        none /sys/kernel/tracing tracefs rw,seclabel,relatime 0 0
        sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
        gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
    
    And for contrast the lines from /proc/mounts for disk backed file systems:
        $ egrep '^/dev/' /proc/mounts
        /dev/sda1 /boot ext4 rw,seclabel,relatime 0 0
        /dev/sda2 / btrfs rw,seclabel,relatime,space_cache,subvolid=258,subvol=/root 0 0
        /dev/sda2 /home btrfs rw,seclabel,relatime,space_cache,subvolid=256,subvol=/home 0 0
    
    Going back to first principles GParted cares that Systemd doesn't
    automount file systems on block devices.  So instead only mask mount
    units which are on block devices.  Where the 'What' property starts
    "/dev/".
    
    Systemd maintains hundreds of properties for each unit.
        $ systemctl show boot.mount | wc -l
        221
    
    The properties of interest for all mount units can be queries like this:
        $ systemctl show --all --property=What,Id,LoadState '*.mount'
        ...
    
        What=sunrpc
        Id=var-lib-nfs-rpc_pipefs.mount
        LoadState=masked
    
        What=/dev/sda1
        Id=boot.mount
        LoadState=masked
    
        ...
    
    [1] 4c109df9b59e55699bd42023cf4007ee359793e9
        Use systemctl runtime mask to prevent automounting (#701676)
    
    [2] 43de8e326a9f6f099e5274619f16039bdc20c1a4
        Do not mask virtual file systems when using systemctl (#708378)
    
    Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
                  anyway

2021-01-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't try to mask non-existent Systemd \xe2\x97\x8f.service (#129)
    
    With Systemd 246 on Fedora 33, running GParted reports this error and no
    longer masks the system mount units:
    
        $ gparted
        Unit \xe2\x97\x8f.service does not exist, proceeding anyway.
        Unit \xe2\x97\x8f.service does not exist, proceeding anyway.
        GParted 1.1.0
        configuration --enable-libparted-dmraid --enable-online-resize
        libparted 3.3
    
        $ systemctl list-units -t mount --full --all --no-legend
          -.mount                       loaded    active   mounted Root Mount
          boot.mount                    loaded    active   mounted /boot
          dev-hugepages.mount           loaded    active   mounted Huge Pages File System
          dev-mqueue.mount              loaded    active   mounted POSIX Message Queue File System
          home.mount                    loaded    active   mounted /home
          proc-fs-nfsd.mount            loaded    inactive dead    NFSD configuration filesystem
          proc-sys-fs-binfmt_misc.mount loaded    inactive dead    Arbitrary Executable File Formats File System
          run-user-1000-gvfs.mount      loaded    active   mounted /run/user/1000/gvfs
          run-user-1000.mount           loaded    active   mounted /run/user/1000
          run-user-42.mount             loaded    active   mounted /run/user/42
          sys-fs-fuse-connections.mount loaded    active   mounted FUSE Control File System
          sys-kernel-config.mount       loaded    active   mounted Kernel Configuration File System
          sys-kernel-debug.mount        loaded    active   mounted Kernel Debug File System
          sys-kernel-tracing.mount      loaded    active   mounted Kernel Trace File System
        * sysroot.mount                 not-found inactive dead    sysroot.mount
          tmp.mount                     loaded    active   mounted Temporary Directory (/tmp)
          var-lib-machines.mount        loaded    inactive dead    Virtual Machine and Container Storage (Compatibility)
          var-lib-nfs-rpc_pipefs.mount  loaded    active   mounted RPC Pipe File System
        * var.mount                     not-found inactive dead    var.mount
    
        ^
       [Unicode Black Circle character (U+25CF) replaced with star to avoid
       making this this commit message Unicode.]
    
    Currently the gparted shell wrapper lists the Systemd mount units and
    takes the first space separated column as the unit name.  If the LOAD
    status of the unit is not "loaded" then Systemd prefixes the name with
    an optional Black Circle.  Prior to Systemd 246 these extra 2 characters
    at the start of the line, including the optional Black Circle, were
    suppressed by the --no-legend option, but with Systemd 246 this no
    longer happens.  As the mount unit names no longer start in the first
    character of the line no units are masked.  Instead the Unicode Black
    Circle character, UTF-8 byte sequence E2 97 8F, is found at the start of
    highlighted lines which results in this error:
        Unit \xe2\x97\x8f.service does not exist, proceeding anyway.
    
    Fix by adding the --plain option to suppress the optional Black Circle
    in the systemctl output.  Confirmed this option is available in the
    oldest supported distributions with Systemd.
        RedHat / CentOS 7   Systemd 219   systemctl has --plain option.
        Ubuntu 16.04 LTS    Systemd 229   systemctl has --plain option.
    
    Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
                  anyway

2021-01-10  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2021-01-01  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2020-11-28  Аляксей <alexey_razumov@tutanota.com>

    Update Belarusian translation

2020-11-13  Curtis Gedak <gedakc@gmail.com>

    Set default partition alignment to cylinder for amiga partition table (#116)
    
    Closes #116 - Fails to create partitions on disks with Amiga partition
                  tables using default settings

2020-11-02  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2020-10-13  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2019-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unneeded #include <vector> from TreeView_Detail.h
    
    std::vector<> is no longer used in TreeView_Detail.h since this commit
    replaced them:
        fae909897e92b55aed0624ec8ccf221806e23ef4
        Use PartitionVector class throughout the code (#759726)

2020-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix CentOS 7 CI test job failures from empty /etc/machine-id (!62)
    
    Since August 2020, GitLab Continuous Integration test jobs have been
    failing on the CentOS 7 image like this from
    tests/test_SupportedFileSystems.log:
    
        process 6319: D-Bus library appears to be incorrectly set up; failed to read machine uuid: UUID file '/etc/machine-id' should contain a hex string of length 32, not length 0, with no other text
        See the manual page for dbus-uuidgen to correct this issue.
          D-Bus not built with -rdynamic so unable to print a backtrace
        Running main() from test_SupportedFileSystems.cc
        DISPLAY=":99"
        /usr/bin/xvfb-run: line 181:  6319 Aborted                 (core dumped) DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1
    
    Not sure why this has just started failing in the CentOS 7 CI image now,
    but the error is widely known [1][2][3][4].  Use
    systemd-machine-id-setup to generate a machine ID [5][6]; rather than
    dbus-uuidgen [7] as it's designed to integrate into VMs and does the
    right thing if a valid machine ID already exists.
    
    [1] Red Hat Bug 598200 - D-Bus library appears to be incorrectly set up;
        failed to read machine uuid: UUID file '/var/lib/dbus/machine-id'
        https://bugzilla.redhat.com/show_bug.cgi?id=598200
    [2] Free Desktop Bug 13194 - When machine-id not found, dbus should not
        abort
        https://bugs.freedesktop.org/show_bug.cgi?id=13194
    [3] D-Bus library appears to be incorrectly set up
        https://unix.stackexchange.com/questions/117741/d-bus-library-appears-to-be-incorrectly-set-up
    [4] Generate uuid for container
        https://xpra.org/trac/wiki/Usage/Docker/CentOS
    [5] CentOS / RHEL 7 : How to Change the machine-id
        https://www.thegeekdiary.com/centos-rhel-7-how-to-change-the-machine-id/
    [6] man systemd-machine-id-setup
        https://man7.org/linux/man-pages/man1/systemd-machine-id-setup.1.html
    [7] man dbus-uuidgen
        https://dbus.freedesktop.org/doc/dbus-uuidgen.1.html
    
    Closes !62 - Fix CentOS 7 CI test job failures because of zero sized
                 /etc/machine-id

2020-09-11  Fabio Tomat <f.t.public@gmail.com>

    Update Friulian translation

2020-09-06  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2020-08-30  Boyuan Yang <073plan@gmail.com>

    Update Chinese (China) translation

2020-07-12  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation
    
    Fixes https://gitlab.gnome.org/Teams/Translation/pl/-/issues/8

2020-06-26  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2020-05-31  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2019-12-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Devices module

2020-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Exclude PipeCapture read NUL byte unit tests in GitLab CI jobs (!60)
    
    These PipeCapture unit tests are also failing, preventing the
    ubuntu_test CI job passing:
        PipeCaptureTest.ReadEmbeddedNULCharacter
        PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character
    
    These tests are also failing locally in both Ubuntu 20.04 LTS and
    Fedora 32 VMs, but not in Ubuntu 18.04 LTS or Fedora 31 VMs.  As this is
    not specifically a Ubuntu docker image update related issue, temporarily
    exclude these failing tests.
    
    Closes !60 - Fix GitLab CI job failures following Ubuntu docker image
                 updates

2020-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add C++ compiler into GitLab CI Ubuntu image (!60)
    
    Next the Ubuntu image CI job is failing without a C++ compiler like
    this:
    
        checking whether to enable maintainer-specific portions of Makefiles... yes
        checking for g++... no
        checking for c++... no
        checking for gpp... no
        checking for aCC... no
        checking for CC... no
        checking for cxx... no
        checking for cc++... no
        checking for cl.exe... no
        checking for FCC... no
        checking for KCC... no
        checking for RCC... no
        checking for xlC_r... no
        checking for xlC... no
        checking whether the C++ compiler works... no
        configure: error: in `/builds/mfleetwo/gparted':
        configure: error: C++ compiler cannot create executables
        See `config.log' for more details
        ...
        ERROR: Job failed: exit code 1
    
    The published "Ubuntu" docker image has been updated to Ubuntu 20.04 LTS
    and must no longer include the build tools by default, or not be a
    dependency of any of the other installed packages.  Explicitly install
    build-essential to get the C++ compiler [1].  Also don't list make as
    build-essential includes it.
    
    [1] Installing the GNU C compiler and GNU C++ compiler
        https://help.ubuntu.com/community/InstallingCompilers
    
    Closes !60 - Fix GitLab CI job failures following Ubuntu docker image
                 updates

2020-05-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent tzdata install hang in GitLab CI Ubuntu image (!60)
    
    The Ubuntu based GitLab CI jobs have recently started being terminated
    after the default 1 hour timeout.  Installing / updating packages in the
    image is updating the tzdata package which is prompting for input which
    it will never receive, hence the hang.  The end of output from the job
    looks like this:
    
        Setting up tzdata (2020a-0ubuntu0.20.04) ...
        debconf: unable to initialize frontend: Dialog
        debconf: (TERM is not set, so the dialog frontend is not usable.)
        debconf: falling back to frontend: Readline
        Configuring tzdata
        ------------------
        Please select the geographic area in which you live. Subsequent configuration
        questions will narrow this down by presenting a list of cities, representing
        the time zones in which they are located.
          1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
          2. America     5. Arctic     8. Europe    11. SystemV
          3. Antarctica  6. Asia       9. Indian    12. US
        Geographic area:
        ...
        ERROR: Job failed: execution took longer than 1h0m0s seconds
    
    This is a well known issue [1][2][3].  Probably occurring now because of
    a new release of tzdata not included in the base Ubuntu image we are
    using.  Fix by telling the underlying dpkg tools this installation is
    non-interactive.
    
    [1] Avoiding user interaction with tzdata when installing certbot in a
        docker container
        https://askubuntu.com/questions/909277/avoiding-user-interaction-with-tzdata-when-installing-certbot-in-a-docker-contai
    [2] How to install tzdata on a ubuntu docker image?
        https://serverfault.com/questions/949991/how-to-install-tzdata-on-a-ubuntu-docker-image
    [3] apt-get install tzdata noninteractive
        https://stackoverflow.com/questions/44331836/apt-get-install-tzdata-noninteractive
    
    Closes !60 - Fix GitLab CI job failures following Ubuntu docker image
                 updates

2020-05-24  Yi-Jyun Pan <pan93412@gmail.com>

    Update Chinese (Taiwan) translation

2020-05-04  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2020-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace TRUE #define with C++ true literal
    
    Everywhere else in the code the lower case true C++ boolean literal is
    used.  Change this one place where upper case TRUE #define was used to
    match.

2020-03-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add /dev/disk/by-id/ symlink in CI for test_BlockSpecial
    
    This previous commit [1] excluded unit test
    BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches because GNOME
    GitLab Docker CI images don't have /dev/disk hierarchy and so no
    symbolic links to block devices.
    
    Create the /dev/disk/by-id directory and a symlink for this unit test to
    use in the new tests/makedev.sh script.
    
    [1] fe2fc33e67980f0b4a5bba958d257be54715f301
        Exclude unit test which fails in Docker CI image (!4)

2020-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Exclude unit tests needing losetup in Docker CI image (!59)
    
    test_SupportedFileSystems is another unit test that has been failing
    since 23-Feb-2020 in GNOME GitLab Continuous Integration test jobs.
    Fragments from tests/test-suite.log from a failed test CI job:
    
        FAIL: test_SupportedFileSystems
        ===============================
        ...
        [ RUN      ] My/SupportedFileSystemsTest.Create/lvm2pv
        test_SupportedFileSystems.cc:387: Failure
        Failed
        create_loopdev(): Execute: losetup --find --show 'test_SupportedFileSystems.img'
        losetup: test_SupportedFileSystems.img: failed to set up loop device: No such file or directory
        create_loopdev(): Losetup failed with exit status 1
        create_loopdev(): Failed to create required loop device
        Error: Could not stat device  - No such file or directory.
        test_SupportedFileSystems.cc:446: Failure
        Value of: lp_device != NULL
          Actual: false
        Expected: true
        test_SupportedFileSystems.cc:490: Failure
        Value of: m_fs_object->create(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        lvm pvcreate -M 2 ''    00:00:00  (ERROR)
    
          WARNING: Failed to connect to lvmetad. Falling back to device scanning.
          Device  not found.
    
        detach_loopdev(): Execute: losetup --detach ''
        losetup: /dev/: detach failed: Inappropriate ioctl for device
        detach_loopdev(): Losetup failed with exit status 1
        detach_loopdev(): Failed to detach loop device.  Test NOT affected
        [  FAILED  ] My/SupportedFileSystemsTest.Create/lvm2pv, where GetParam() = 20 (64 ms)
        ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs
        test_SupportedFileSystems.cc:387: Failure
        Failed
        create_loopdev(): Execute: losetup --find --show 'test_SupportedFileSystems.img'
        losetup: test_SupportedFileSystems.img: failed to set up loop device: No such file or directory
        create_loopdev(): Losetup failed with exit status 1
        create_loopdev(): Failed to create required loop device
        Error: Could not stat device  - No such file or directory.
        test_SupportedFileSystems.cc:446: Failure
        Value of: lp_device != NULL
          Actual: false
        Expected: true
        test_SupportedFileSystems.cc:503: Failure
        Value of: m_fs_object->create(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        mkfs.btrfs -L '' ''    00:00:00  (ERROR)
        btrfs-progs v4.9.1
        See http://btrfs.wiki.kernel.org for more information.
    
        ERROR: failed to check size for : No such file or directory
    
        detach_loopdev(): Execute: losetup --detach ''
        losetup: /dev/: detach failed: Inappropriate ioctl for device
        detach_loopdev(): Losetup failed with exit status 1
        detach_loopdev(): Failed to detach loop device.  Test NOT affected
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs, where GetParam() = 7 (11 ms)
    
    All the test_SupportedFileSystems unit tests which need a loop device
    are failing when running losetup like this:
        losetup: <IMAGE_NAME>: failed to setup loop device: No such file or directory
    
    losetup uses /dev/loop-control [1][2] which no longer exists in the
    Docker image.  However even after creating /dev/loop-control in the
    image, losetup continues to fail.  Also tried stracing losetup but that
    fails like this, presumably because it is not allowed inside the Docker
    image:
        $ strace losetup --find --show /tmp/disk.img
        strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
        +++ exited with 1 +++
    
    For now I have run out of ways to investigate and resolve this, so just
    exclude the 12 tests which required loop devices.  All the tests still
    execute when run locally outside the restricted GNOME GitLab CI Docker
    setup.
    
    Closes !59 - Fix GNOME GitLab CI test job failures because of missing
                 /dev entries

2020-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create block special devices needed by test_BlockSpecial in GitLab CI jobs (!59)
    
    From 23-Feb-2020 onwards, GNOME GitLab Continuous Integration test jobs
    have been failing running unit tests which previously succeeded.  With
    some extra debugging added into test_BlockSpecial to print 'bname' and
    'bs' values in the failing tests, here are fragments from
    tests/test-suite.log for the the test_BlockSpecial failures in a test CI
    job:
    
        FAIL: test_BlockSpecial
        =======================
        ...
        [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBlockDevice
        bname="/dev/sr0"
        bs=BlockSpecial{"/dev/sr0",0,0}
        test_BlockSpecial.cc:218: Failure
        Value of: bs.m_major > 0 || bs.m_minor > 0
          Actual: false
        Expected: true
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBlockDevice (0 ms)
        ...
        [ RUN      ] BlockSpecialTest.TwoNamedBlockSpecialObjectBlockDevices
        bname1="/dev/sr0"
        bname2="/dev/sda"
        bs1=BlockSpecial{"/dev/sr0",0,0}
        bs2=BlockSpecial{"/dev/sda",0,0}
        test_BlockSpecial.cc:250: Failure
        Value of: bs1.m_major != bs2.m_major || bs1.m_minor != bs2.m_minor
          Actual: false
        Expected: true
        [  FAILED  ] BlockSpecialTest.TwoNamedBlockSpecialObjectBlockDevices (1 ms)
    
    Contents of /proc/partitions inside the Docker image when this test CI
    job failed:
    
        $ cat /proc/partitions
        major minor  #blocks  name
          11        0    1048575 sr0
           8        0  573367448 sda
           8        1  573366407 sda1
    
    And the listing of /dev/:
    
        $ ls -l /dev/
        total 0
        lrwxrwxrwx 1 root root   11 Mar  3 09:00 core -> /proc/kcore
        lrwxrwxrwx 1 root root   13 Mar  3 09:00 fd -> /proc/self/fd
        crw-rw-rw- 1 root root 1, 7 Mar  3 09:00 full
        drwxrwxrwt 2 root root   40 Mar  3 09:00 mqueue
        crw-rw-rw- 1 root root 1, 3 Mar  3 09:00 null
        lrwxrwxrwx 1 root root    8 Mar  3 09:00 ptmx -> pts/ptmx
        drwxr-xr-x 2 root root    0 Mar  3 09:00 pts
        crw-rw-rw- 1 root root 1, 8 Mar  3 09:00 random
        drwxrwxrwt 2 root root   40 Mar  3 09:00 shm
        lrwxrwxrwx 1 root root   15 Mar  3 09:00 stderr -> /proc/self/fd/2
        lrwxrwxrwx 1 root root   15 Mar  3 09:00 stdin -> /proc/self/fd/0
        lrwxrwxrwx 1 root root   15 Mar  3 09:00 stdout -> /proc/self/fd/1
        crw-rw-rw- 1 root root 5, 0 Mar  3 09:00 tty
        crw-rw-rw- 1 root root 1, 9 Mar  3 09:00 urandom
        crw-rw-rw- 1 root root 1, 5 Mar  3 09:00 zero
    
    See how the test_BlockSpecial fixtures are getting major=0 and minor=0
    for the block special devices they are testing with.  This is happening
    because there aren't any entries in /dev for those disks and partitions
    listed in /proc/partitions.  Assume that Docker in GNOME GitLab has
    changed and that unneeded and unwanted devices in /dev are no longer
    being created inside images.
    
    In the test CI jobs execute new script, tests/makedev.sh, to create just
    the first two block special devices mentioned in /proc/partitions needed
    by test_BlockSpecial.
    
    Closes !59 - Fix GNOME GitLab CI test job failures because of missing
                 /dev entries

2020-01-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Delete old Fill txtview_device_info_buffer comment
    
    Seems to be referring to how Fill_Label_Device_Info() worked in the
    past, but from history before the beginning of the GIT repository.
    Remove out of date comment.

2020-02-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reliably detect running gpartedbin using pidof (!54)
    
    Debian user reported a bug [1] that when they had PS_FORMAT environment
    variable set it prevented GParted running:
    
        # export PS_FORMAT='ruser,uid,pid,ppid,pri,ni,%cpu,%mem,vsz,rss,stat,tty,start,time,command'
        # gparted
        The process gpartedbin is already running.
        Only one gpartedbin process is permitted.
        # echo $?
        1
    
    Using ps column 'command' includes the command and all it's arguments,
    rather than just the command name as ps displays by default.  Thus the
    shell wrapper finds the grep command it's using when searching for the
    gpartedbin executable.
    
        # ps -e | grep gpartedbin
        root         0 26114 14777  19   0  0.0  0.0 112712   940 S+   pts/0    10:42:02 00:00:00 grep --color=auto gpartedbin
    
    Fix by searching for running processes using pidof.  pgrep does regular
    expression matching where as pidof checks program name is the same [2].
    Therefore use of pidof is preferred over pgrep [3].
    
    [1] Debian bug #864932 - gparted fails if PS_FORMAT options are
                             specified
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864932
    
    [2] Difference between pidof and pgrep?
        https://stackoverflow.com/questions/52151698/difference-between-pidof-and-pgrep
    
    [3] [PATCH] gparted.in: Use reliable way of detecting gpartedbin process
        existence
        https://git.alpinelinux.org/aports/tree/community/gparted/gparted.in-Use-reliable-way-of-detecting-gpartedbin-.patch
    
    Closes !54 - Fix gparted not launching when PS_FORMAT environment
                 variable set

2020-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename local variables to mke2fs_*_ver
    
    To better reflect that they represent the version of mke2fs executable
    from the e2fsprogs package, even though the executable is called as
    mkfs.ext4.
    
        $ ls -il /sbin/mke2fs /sbin/mkfs.ext*
        1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mke2fs
        1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mkfs.ext2
        1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mkfs.ext3
        1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mkfs.ext4
        $ mkfs.ext4 -V
        mke2fs 1.42.9 (28-Dec-2013)
                Using EXT2FS Library version 1.42.9
        $ mke2fs -V
        mke2fs 1.42.9 (28-Dec-2013)
                Using EXT2FS Library version 1.42.9

2020-02-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify sscanf("mke2fs ...") text match
    
    With removal of support for RHEL / CentOS 5 and it's e4fsprogs package
    [1][2] it is no longer necessary to accept:
        mke4fs 1.41.12 (17-May-2010)
    only:
        mke2fs 1.42.9 (28-Dec-2013)
    
    [1] 6c4ab5dc28a14f3bef2d1c1a24da219381d513f0
        Remove checks for e4fsprogs commands (#794253)
    
    [2] de6e70d933286f3c65187470c9852fb6d8a60a7d
        Simplify ext2::get_filesystem_support() with regard ext4 support (#794253)

2020-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Raise minimum supported dosfstools to 3.0.18 (!57)
    
    This earlier commit [1] from 2013 recognised the new names for programs
    in dosfstools >= 3.0.18, specifically mkfs.fat and fsck.fat.  Now that
    the oldest supported distributions use dosfstools >= 3.0.18 it is no
    longer necessary to support using the old names of mkdosfs and dosfsck,
    so remove that code.
    
        Oldest supported   Dosfstools
        distributions      Version
    
        Debian 8           3.0.27
        RHEL / CentOS 7    3.0.20
        SLES 12            3.0.26
        Ubuntu 14.04 LTS   3.0.26
    
    [1] 1ae03dee953f512c0c664369db2d5e5db80b4058
        Recognise new dosfstools program names (#704629)
    
    Closes !57 - Raise minimum support dosfstools to 3.0.18 released
                 2013-06-06

2020-02-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused udevinfo from README
    
    Missed removing mention of udevinfo from README when this earlier commit
    removed it's use by GParted.
        3f15a66291af1f2db142edfe2a9219da219a29d5
        Drop use of long ago removed udevinfo

2020-02-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wait for udev change on /dev/DISK when erasing signatures (#83)
    
    A user reported that formatting a whole disk device with a file system
    failed like this:
    
        Format /dev/sdd as ext4                                    (ERROR)
        + calibrate /dev/sdd                                       (SUCCESS)
            path: /dev/sdd (device)
            start: 0
            end: 15633407
            size: 15633408 (7.45 GiB)
        + clear old file system signatures in /dev/sdd             (SUCCESS)
          + write 512.00 KiB of zeros at byte offset 0             (SUCCESS)
          + write 4.00 KiB of zeros at byte offset 67108864        (SUCCESS)
          + write 512.00 KiB of zeros at byte offset 8003780608    (SUCCESS)
          + write 4.00 KiB of zeros at byte offset 8004239360      (SUCCESS)
          + write 8.00 KiB of zeros at byte offset 8004296704      (SUCCESS)
          + flush operating system cache of /dev/sdd               (SUCCESS)
        + create new ext4 file system                              (ERROR)
          + mkfs.ext4 -F -O ^64bit -L '' '/dev/sdd'                (ERROR)
            mke2fs 1.44.1 (24-Mar-2018)
            /dev/sdd is apparently in use by the system; will not make a filesystem here!
    
    Opening the whole disk block device exclusively causes mkfs.ext4 to
    report that error like this:
    
        # python
        >>> import os
        >>> f = os.open('/dev/sdb',os.O_RDONLY|os.O_EXCL)
        >>> ^Z
        [1]+  Stopped                 python
        # mkfs.ext4 -F -O ^64bit -L '' '/dev/sdb'
        mke2fs 1.42.9 (28-Dec-2013)
        /dev/sdb is apparently in use by the system; will not make a filesystem here!
        # echo $?
        1
    
    I have not been able to reproduce this error, but with debugging and
    sleeping in GParted, stracing GParted and using 'udevadm monitor' to
    watch udev events the following sequence of events is seen:
    
      gparted    |format(partition, operationdetail)
      gparted    |  erase_filesystem_signatures(partition, operationdetail)
      gparted    |    get_device(device_path="/dev/sdb", lp_device, flush=false)
      gparted    |      ped_device_get("/dev/sdb")
      libparted  |        open("/dev/sdb", O_RDONLY) = 11
      libparted  |        close(11)
      gparted    |    ped_device_open(lp_device)
      libparted  |      open("/dev/sdb", O_RDWR) = 11
      gparted    |    ped_device_sync(lp_device)
      libparted  |      ioctl(11, BLKFLSBUF)
      gparted    |    ped_device_close()
      libparted  |      close(11)
      udev(async)|        KERNEL change /devices/.../sdb (block)
      udev(async)|        UDEV   change /devices/.../sdb (block)
      gparted    |  set_partition_type(partition, operationdetail)
      gparted    |  create_filesystem(partition, operationdetail)
      gparted    |    ext2::create(partition, operationdetail)
      gparted    |      FileSystem::execute_command("mkfs.ext4 -F -O ^64bit -L '' '/dev/sdb')
    
    So it is assumed that the processing of the udev change rule after
    closing the block device in erase_filesystem_signatures() overlaps with
    the execution mkfs.ext4 and causes the seen error.  Fix by waiting for
    those udev events to complete as was previously done by commits [1][2]
    [3].
    
    Also note that this is specific to creating file systems on and
    formatting unpartitioned whole disk devices because set_partition_type()
    is a no-operation.  Where as on a partitioned device
    set_partition_type() calls commit() which already waits for udev rules
    to complete [3].
    
    [1] 50c8924a8e4d9cc96a2ea45f13291114402affee
        Wait for udev to recreate /dev/PTN entries when querying partition
        FSs (!46)
    [2] 4f6c312e3bc68cafb5e6035fd4a5b5bbbfcea992
        Wait for udev change on /dev/DISK when querying whole device FS
        (!46)
    [3] 2f53876c0fc8bceddabe739c298e19e7939d9ad7
        Wait for the kernel and udev to settle partitions for a second time
        (#790418)
    
    Closes #83 - /dev/sdd is apparently in use by the system; will not make
                 a filesystem here!

2020-02-25  Daniele Forsi <dforsi@gmail.com>

    Fix formatting directive in it.po (!58)
    
    Fixes:
        (gpartedbin:78003): glibmm-WARNING **: 22:55:05.465: invalid
        substitution "%s" in fmt string "percorso: %1 (%s)"
    
    Closes !58 - Fix formatting directive in it.po (!58)

2020-02-26  Nathan Follens <nfollens@gnome.org>

    Update Dutch translation

2020-02-23  Daniel Korostil <ted.korostiled@gmail.com>

    Update Ukrainian translation

2020-02-04  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2020-01-29  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2020-01-20  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development
    
    Also fix minor whitespace mistake in NEWS

2020-01-20  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.1.0   ==========

2020-01-20  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2020-01-19  A S Alam <amanpreet.alam@gmail.com>

    Update Punjabi translation

2020-01-15  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>

    Update Latvian translation

2020-01-14  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2020-01-12  Bruce Cowan <bruce@bcowan.me.uk>

    Update British English translation

2020-01-12  Wolfgang Stöggl <c72578@yahoo.de>

    Update German translation

2020-01-11  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2020-01-11  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2020-01-10  Sveinn í Felli <sv1@fellsnet.is>

    Update Icelandic translation

2019-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Save all files on CI job failure for investigation
    
    Since patchset !49 "Add file system interface tests" was merged the
    GitLab Continuous Integration jobs have sometimes failed executing
    test_SupportedFilesystems.  So on failure save all files from the docker
    image for 1 week for investigation.
    
    Documentation:
    * Introduction to job artifacts
      https://gitlab.gnome.org/help/user/project/pipelines/job_artifacts.md
    
    * GitLab CI/CD Pipeline Configuration Reference, artifacts
      https://gitlab.gnome.org/help/ci/yaml/README.md#artifacts

2019-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename TreeView_Detail::treeview_filesystems_Columns member to fsname (!52)
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename DialogFeatures::treeview_filesystems_Columns member to fsname (!52)
    
    Name the structure member to 'fsname' used to store strings like "ext2"
    etc.  This is equivalent to what was previously done in this commit:
        a9f08ddc7dd615b0ce4eb62098439514605fc998
        Rename local variable to fsname in get_filesystem() (#741430)
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename create_format_menu_add_item() parameter of type FSType (!52)
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename set_device_partitions() local variable of type FSType (!52)
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Utils method parameters of type FSType (!52)
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also rename FS.filesystem member to fstype (!52)
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Partition.filesystem member to fstype (!52)
    
    Previously made this change:
        175d27c55d44b87ec873a0b09847e8022011d51f
        Rename enum FILESYSTEM to FSType
    
    Now complete the renaming exercise of members and variables currently
    named 'filesystem'.
    
    Closes !52 - Rename members and variables currently named 'filesystem'

2019-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop requesting partition paths of free space and metadata
    
    In GParted_Core::set_device_partitions() the partition path is being
    queried from libparted.  However this is done before the switch
    statement on the type of the partition, so is called for all libparted
    partition objects including PED_PARTITION_FREESPACE and
    PED_PARTITION_METADATA ones.  As libparted numbers these partition
    objects as -1, it returns paths like "/dev/sda-1".
    
    Additionally when using GParted, with it's default DMRaid handling, on a
    dmraid started array this results in paths like
    "/dev/mapper/isw_ecccdhhiga_MyArray-1" being passed to
    is_dmraid_device() and make_path_dmraid_compatible().  Fortunately
    make_path_dmraid_compatible() does nothing and returns the same name.
    Call chain looks like:
    
        GParted_Core::set_device_partitions()
          get_partition_path(lp_partition)
            // where:
            // lp_partition->disk->dev->path = "/dev/mapper/isw_ecccdhhiga_MyArray"
            // lp_partition->type == PED_PARTITION_FREESPACE |
            //                       PED_PARTITION_METADATA
            //              ->num == -1
            ped_partition_get_path(lp_partition)
              return "/dev/mapper/isw_ecccdhhiga_MyArray-1"
            dmraid.is_dmraid_supported()
            dmraid.is_dmraid_device("/dev/mapper/isw_ecccdhhiga_MyArray-1")
              return true
            dmraid.make_path_dmraid_compatible("/dev/mapper/isw_ecccdhhiga_MyArray-1")
              return "/dev/mapper/isw_ecccdhhiga_MyArray-1"
    
    Fix by moving the get_partition_path() call inside the switch statement
    so that it is only called for PED_PARTITION_NORMAL,
    PED_PARTITION_LOGICAL and PED_PARTITION_EXTENDED partition types.
    
    Relevant commits:
    *   53c49349f71693873805e87856b4c56f2860e6d8
        Simplify logic in set_device_partitions method
    
    *   81986c0990eef65593ef23397074cf61cdca415f
        Ensure partition path name is compatible with dmraid (#622217)

2019-11-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make 4 internally used only DMRaid methods private

2019-11-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise ATARAID members started by dmraid (#75)
    
    This is not strictly necessary as members are already recognised using
    blkid since this commit earlier in the sequence "Recognise ATARAID
    members (#75)".  However it makes sure active members are recognised
    even if blkid is not available and matches how file system detection
    queries the SWRaid_Info module.
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display array device as mount point of dmraid started ATARAID members (#75)
    
    This matches how the array device is displayed as the mount point for
    mdadm started ATARAID members by "Display array device as mount point of
    mdadm started ATARAID members (#75)" earlier in this patchset.
    
    Extend the DMRaid module member cache to save the array device name and
    use as needed to display as the mount point.
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Detect busy status of dmraid started ATARAID members (#75)
    
    Again this is to stop GParted allowing overwrite operations being
    performed on an ATARAID member while the array is actively using the
    member.  This time for dmraid started arrays using the kernel DM (Device
    Mapper) driver.
    
    The DMRaid module already uses dmraid to report active array names:
    
        # dmraid -sa -c
        isw_ecccdhhiga_MyArray
    
    To find active members in this array, (1) use udev to lookup the kernel
    device name:
    
        # udevadm info --query=name /dev/mapper/isw_ecccdhhiga_MyArray
        dm-0
    
    (2) list the member names exposed by the kernel DM driver through the
    /sys file system.
    
        # ls /sys/block/dm-0/slaves
        sdc  sdd
        # ls -l /sys/block/dm-0/slaves
        lrwxrwxrwx 1 root root 0 Nov 24 09:52 sdc -> ../../../../pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sdc
        lrwxrwxrwx 1 root root 0 Nov 24 09:52 sdc -> ../../../../pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdd
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable basic supported actions for ATARAID members (#75)
    
    When an ATARAID member is inactive allow basic supported actions of
    copy and move to be performed like with other recognised but only basic
    supported types.
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent unmount of busy ATARAID members (#75)
    
    Since earlier commit "Display array device as mount point of mdadm
    started ATARAID members (#75)" GParted allows attempting to unmout a
    busy ATARAID member as if it was a file system.  This is not a valid
    thing to do, so disallow it.
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display array uuid of mdadm recognised ATARAID members (#75)
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display array device as mount point of mdadm started ATARAID members (#75)
    
    This matches how other non-file systems are handled, by displaying the
    access reference in the mount point column.  For LVM Physical Volumes
    the Volume Group name is displayed [1] and for an active Linux Software
    RAID array the array device is displayed [2].
    
    [1] 8083f11d84dbd4f186271a3cdbf5170db259f8b8
        Display LVM2 VGNAME as the PV's mount point (#160787)
    
    [2] f6c2f00df7858a7f4b97e699b9bcf1023bba850a
        Populate member mount point with SWRaid array device (#756829)
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Detect busy status of mdadm started ATARAID members (#75)
    
    This stops GParted allowing overwrite operations (such as create
    partition table or format with a whole device file system) being
    performed on an ATARAID member while the array is actively using the
    member.
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display correct type of mdadm recognised ATARAID members (#75)
    
    The previous commit, made mdadm recognised IMSM and DDF type ATARAID
    members get displayed as "linux-raid" (Linux Software RAID array
    member).  This was because of query method 1 in detect_filesystems().
    
    Fix this now by exposing and using the fstype of the member from the
    SWRaid_Info cache.
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Parse ATARAID members from mdadm output and /proc/mdstat (#75)
    
    Since mdadm release 3.0 (2009-06-02) [1] it has also supported external
    metadata formats IMSM (Intel Matrix Storage Manager) and DDF, previously
    only managed by dmraid.
    
    A number of distributions have switched to use mdadm and kernel MD
    (Multiple Devices) driver for managing these Firmware / BIOS / ATARAID
    arrays.  These include: Fedora >= 14 [2], RHEL / CentOS >= 6 [3],
    SLES >= 12 [4], Ubuntu >= 16.04 LTS.
    
    Therefore additionally parse members in these ATARAID arrays included in
    mdadm output, and when activated using the kernel MD driver, in file
    /proc/mdstat.  Add fstype to the SWRaid_Info cache records to
    distinguish members apart.  So far the rest of the GParted code
    continues to treat all members as FS_LINUX_SWRAID.  This will be
    resolved in following commits.
    
    Note that this in no way affects how GParted shows and partitions the
    array device itself, even those managed by dmraid and use the GParted
    DMRaid module.  It only affects how GParted shows the member drives
    themselves.
    
    [1] mdadm ANNOUNCE-3.0 file
        https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/tree/ANNOUNCE-3.0?h=mdadm-3.0
    
    [2] Fedora 14, Storage Administration Guide, 12.5. Linux RAID Subsystem
        https://docs.fedoraproject.org/en-US/Fedora/14/html/Storage_Administration_Guide/raid-subsys.html
        "...  Fedora 14 uses mdraid with external metadata to access ISW /
        IMSM (Intel firmware RAID) sets.  mdraid sets are configured and
        controlled through the mdadm utility."
    
    [3] RHEL 6, Storage Administration Guide, 17.3. Linux RAID Subsystem
        https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/storage_administration_guide/raid-subsys
        "mdraid also supports other metadata formats, known as external
        metadata.  Red Hat Enterprise Linux 6 uses mdraid with external
        metadata to access ISW / IMSM (Intel firmware RAID) sets.  mdraid
        sets are configured and controlled through the mdadm utility."
    
    [4] SUSE Linux Enterprise Server 12 Release Notes, 7.2.3 Driver for IMSM
        and DDF
        https://www.suse.com/releasenotes/x86_64/SUSE-SLES/12/#fate-316007
        "For IMSM and DDF RAIDs the mdadm driver is used unconditionally."
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise ATARAID members (#75)
    
    PATCHSET OVERVIEW
    
    A user had a Firmware / BIOS / ATARAID array of 2 devices configured as
    a RAID 0 (stripe) set.  On top of that was a GPT with the OS partitions.
    GParted displays the following errors on initial load and subsequent
    refresh:
    
            Libparted Error
        (-) Invalid argument during seek for read on /dev/sda
                              [ Retry ] [ Cancel ] [ Ignore ]
    
            Libparted Error
        (-) The backup GPT table is corrupt, but the
            primary appears OK, so that will be used.
                                  [  Ok  ] [ Cancel ]
    
    This is an Intel Software RAID array which stores metadata at the end of
    each member device, and so the first 128 KiB stripe of the set is stored
    in the first 128 KiB of the first member device /dev/sda which includes
    the GPT for the whole RAID 0 device.  Hence when libparted reads member
    device /dev/sda it finds a GPT describing a block device twice it's
    size and in results the above errors when trying to read the backup GPT.
    
    A more dangerous scenario occurs when using 2 devices configured in an
    Intel Software RAID 1 (mirrored) set with GPT on top.  On refresh
    GParted display this error for both members, /dev/sda and /dev/sdb:
    
            Libparted Warning
        /!\ Not all of the space available to /dev/sda appears to be used,
            you can fix the GPT to use all of the space (an extra 9554
            blocks) or continue with the current setting?
                                                      [  Fix  ] [ Ignore ]
    
    Selecting [Fix] gets libparted to re-write the backup GPT to the end of
    the member device, overwriting the ISW metadata!  Do that twice and both
    copies of the metadata are gone!
    
    Worked example of this more dangerous mirrored set case.  Initial setup:
    
        # dmraid -s
        *** Group superset isw_caffbiaegi
        --> Subset
        name   : isw_caffbiaegi_MyMirror
        size   : 16768000
        stride : 128
        type   : mirror
        status : ok
        subsets: 0
        devs   : 2
        spares : 0
    
        # dmraid -r
        /dev/sda: isw, "isw_caffbiaegi", GROUP, ok, 16777214 sectors, data@ 0
        /dev/sdb: isw, "isw_caffbiaegi", GROUP, ok, 16777214 sectors, data@ 0
    
        # wipefs /dev/sda
        offset               type
        ---------------------------------------------
        0x200                gpt   [partition table]
        0x1fffffc00          isw_raid_member   [raid]
    
    Run GParted and click [Fix] on /dev/sda.  Now the first member has gone:
    
        # dmraid -s
        *** Group superset isw_caffbiaegi
        --> *Inconsistent* Subset
        name   : isw_caffbiaegi_MyMirror
        size   : 16768000
        stride : 128
        type   : mirror
        status : inconsistent
        subsets: 0
        devs   : 1
        spares : 0
    
        # dmraid -r
        /dev/sdb: isw, "isw_caffbiaegi", GROUP, ok, 16777214 sectors, data@ 0
    
        # wipefs /dev/sda
        offset               type
        ---------------------------------------------
        0x200                gpt   [partition table]
    
    Click [Fix] on /dev/sdb.  Now all members of the array are gone:
    
        # dmraid -s
        no raid disks
    
        # dmraid -r
        no raid disks
    
        # wipefs /dev/sdb
        offset               type
        ---------------------------------------------
        0x200                gpt   [partition table]
    
    So GParted must not run libparted partition table scanning on the member
    devices in ATARAID arrays.  Only on the array device itself.
    
    In terms of the UI GParted must show disks which are ATARAID members as
    whole disk devices with ATARAID member content and detect array busy
    status to avoid allowing active members from being overwritten while in
    use.
    
    THIS COMMIT
    
    Recognise ATARAID member devices and display in GParted as whole device
    "ataraid" file systems.  Because they are recognised as whole device
    content ("ataraid" file systems) this alone stops GParted running the
    libparted partition table scanning and avoids the above errors.
    
    The list of dmraid supported formats is matched by the signatures
    recognised by blkid:
    
        $ dmraid -l
        asr     : Adaptec HostRAID ASR (0,1,10)
        ddf1    : SNIA DDF1 (0,1,4,5,linear)
        hpt37x  : Highpoint HPT37X (S,0,1,10,01)
        hpt45x  : Highpoint HPT45X (S,0,1,10)
        isw     : Intel Software RAID (0,1,5,01)
        jmicron : JMicron ATARAID (S,0,1)
        lsi     : LSI Logic MegaRAID (0,1,10)
        nvidia  : NVidia RAID (S,0,1,10,5)
        pdc     : Promise FastTrack (S,0,1,10)
        sil     : Silicon Image(tm) Medley(tm) (0,1,10)
        via     : VIA Software RAID (S,0,1,10)
        dos     : DOS partitions on SW RAIDs
    
        $ fgrep -h _raid_member util-linux/libblkid/src/superblocks/*.c
                .name           = "adaptec_raid_member",
                .name           = "ddf_raid_member",
                .name           = "hpt45x_raid_member",
                .name           = "hpt37x_raid_member",
                .name           = "isw_raid_member",
                .name           = "jmicron_raid_member",
                .name           = "linux_raid_member",
                .name           = "lsi_mega_raid_member",
                .name           = "nvidia_raid_member",
                .name           = "promise_fasttrack_raid_member",
                .name           = "silicon_medley_raid_member",
                .name           = "via_raid_member",
    
    As they are all types of Firmware / BIOS / ATARAID arrays, report all
    members as a single "ataraid" file system type.  (Except for
    "linux_raid_member" in the above blkid source listing which is Linux
    Software RAID).
    
    Closes #75 - Errors with GPT on RAID 0 ATARAID array

2019-12-01  Andre Klapper <a9016009@gmx.de>

    Fix an incorrect translation in the Spanish user help
    
    See #80

2019-12-01  Andre Klapper <a9016009@gmx.de>

    Fix typo in Spanish translation of user help
    
    Fixes #80

2019-11-28  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2019-11-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into jfs.cc

2019-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unallocated space comment from HACKING file (!50)
    
    The HACKING file should be hints for making changes to the code base and
    associated processes.  A overview of how GParted handled unallocated
    space was not that.  Also now the size of a JFS is accurately calculated
    using JFS as an example of a file system with intrinsic unallocated
    space is no longer valid.  Therefore removed from the HACKING file.
    Instead add the original commit message as an extended comment to method
    calc_significant_unallocated_sectors().
    
    Closes !50 - Calculate JFS size accurately

2019-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Calculate mounted JFS size accurately (!50)
    
    With the same minimum sized 16 MiB JFS used in the previous commit, now
    mounted, GParted once again reports 1.20 MiB of unallocated space.  This
    is because the kernel JFS driver is also just reporting the size of the
    Aggregate Disk Map (dmap) as the size of the file system [1].
    
    Fix by reading the on disk JFS superblock to calculate the size of the
    file system, but query the free space from the kernel using statvfs().
    Need to query mounted JFS free space from the kernel because the on disk
    dmap is not updated immediately so doesn't reflect recently used or
    freed disk space.
    
    For example, start with the 16 MiB JFS empty and mounted.
    
        # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
        [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
        # df -k /mnt/1
        Filesystem     1K-blocks  Used Available Use% Mounted on
        /dev/sdb1          15152   136     15016   1% /mnt/1
    
    Write 10 MiB of data to it:
    
        # dd if=/dev/zero bs=1M count=10 of=/mnt/1/file_10M
        10+0 records in
        10+0 records out
        1048760 bytes (10 MB, 10 MiB) copied, 0.0415676 s, 252 MB/s
    
    Query the file system free space from the kernel and by reading the on
    disk dmap figure:
    
        # df -k /mnt/1
        Filesystem     1K-blocks  Used Available Use% Mounted on
        /dev/sdb1          15152 10376      4776  69% /mnt/1
        # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
        [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
    
        # sync
        # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
        [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
    
        # umount /mnt/1
        # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
        [2] dn_nfree:           0x000000004aa   [10] dn_agwidth:        1
    
    The kernel reports the updated usage straight away, but the on disk dmap
    record doesn't get updated even by sync, only after unmounting.
    
    This is the same fix as was previously done for EXT2/3/4 [2].
    
    [1] Linux jfs_statfs() function
        https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/jfs/super.c?h=v3.10#n142
    
    [2] 3828019030f981cc5b3411badc40704f5525fdb3
        Read file system size for mounted ext2/3/4 from superblock (#683255)
    
    Closes !50 - Calculate JFS size accurately

2019-11-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Calculate unmounted JFS size accurately (!50)
    
    Create the smallest possible JFS (16 MiB) and GParted will report
    1.2 MiB of unallocated space.  This is because the size of the Aggregate
    Disk Map (dmap) was used as the size of the file system.  However after
    reading the source code to mkfs.jfs, it separately accounts for the size
    of the Log (Journal) and the FSCK Working Space.  The size of a JFS is
    the sum of these 3 components added together.
    
    Using the minimum 16 MiB JFS as an example:
    
        # jfs_debugfs /dev/sdb1
        jfs_debugfs version 1.1.15, 04-Mar-2011
    
        Aggregate Block Size: 4096
    
        > superblock
        [1] s_magic:            'JFS1'          [15] s_ait2.addr1:      0x00
        [2] s_version:          1               [16] s_ait2.addr2:      0x00000018
        [3] s_size:     0x0000000000007660           s_ait2.address:    24
        [4] s_bsize:            4096            [17] s_logdev:          0x00000000
        [5] s_l2bsize:          12              [18] s_logserial:       0x00000000
        [6] s_l2bfactor:        3               [19] s_logpxd.len:      256
        [7] s_pbsize:           512             [20] s_logpxd.addr1:    0x00
        [8] s_l2pbsize:         9               [21] s_logpxd.addr2:    0x00000f00
        [9] pad:                Not Displayed        s_logpxd.address:  3840
        [10] s_agsize:          0x00002000      [22] s_fsckpxd.len:     52
        [11] s_flag:            0x10200900      [23] s_fsckpxd.addr1:   0x00
                                JFS_LINUX       [24] s_fsckpxd.addr2:   0x00000ecc
                JFS_COMMIT      JFS_GROUPCOMMIT      s_fsckpxd.address: 3788
                                JFS_INLINELOG   [25] s_time.tv_sec:     0x5dbbdfa0
                                                [26] s_time.tv_nsec:    0x00000000
                                                [27] s_fpack:           'small_jfs'
        [12] s_state:           0x00000000
                     FM_CLEAN
        [13] s_compress:        0
        [14] s_ait2.len:        4
    
        display_super: [m]odify or e[x]it: x
        > dmap
    
        Block allocation map control page at block 16
    
        [1] dn_mapsize:         0x00000000ecc   [9] dn_agheigth:        0
        [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
        [3] dn_l2nbperpage:     0               [11] dn_agstart:        341
        [4] dn_numag:           1               [12] dn_agl2size:       13
        [5] dn_maxlevel:        0               [13] dn_agfree:         type 'f'
        [6] dn_maxag:           0               [14] dn_agsize:         8192
        [7] dn_agpref:          0               [15] pad:               Not Displayed
        [8] dn_aglevel:         0
        display_dbmap: [m]odify, [f]ree count, [t]ree, e[x]it > x
        > quit
    
    Values of interest:
        s_size        - Aggregate size in device (s_pbsize) blocks
        s_bsize       - Aggregate block (aka file system allocation) size in
                        bytes
        s_pbsize      - Physical (device) block size in bytes
        s_logpxd.len  - Log (Journal) size in Aggregate (s_bsize) blocks
        s_fsckpxd.len - FSCK Working Space in Aggregate (s_bsize) blocks
        dn_nfree      - Number of free (s_bsize) blocks in Aggregate
    
    Calculation:
        file system size = s_size * s_pbsize
                         + s_logpxd.len * s_bsize
                         + s_fsckpxd.len * s_bsize
                         = 30304 * 512
                         + 256 * 4096
                         + 52 * 4096
                         =  16777216
                            (Exactly 16 MiB.  The size of the partition.)
        free space = dn_nfree * s_bsize
                   = 3754 * 4096
                   = 15376384
    
    Rewrite JFS usage querying code to use this updated calculation.
    
    [1] JFS Overview / How the Journaled File System cuts system restart
        times to the quick
        http://jfs.sourceforge.net/project/pub/jfs.pdf
    [2] JFS Layout / How the Journaled File systems handles the on-disk
        layout
        http://jfs.sourceforge.net/project/pub/jfslayout.pdf
    [3] mkfs.jfs source code
        http://jfs.sourceforge.net/project/pub/jfsutils-1.1.15.tar.gz
        mkfs/mkfs.c
        Selected lines from mkfs/mkfs.c
            create_aggregate(..., number_of_blocks, ..., logsize, ...)
                number_of_blocks -= fsck_wspace_length;
                aggr_superblock.s_size = number_of_blocks * (aggr_block_size / phys_block_size);
                aggr_superblock.s_bsize = aggr_block_size;
                aggr_superblock.s_pbsize = phys_block_size;
                PXDlength(&aggr_superblock.s_logpxd, logsize);
                PXDlength(&aggr_superblock.s_fsckpxd, fsck_wspace_length);
            main()
                number_of_bytes = bytes_on_device;
                number_of_blocks = number_of_bytes / agg_block_size;
                logsize = logsize_in_bytes / aggr_block_size;
                number_of_blocks -= logsize;
                create_aggregate(..., number_of_blocks, ..., logsize, ...);
    
    Closes !50 - Calculate JFS size accurately

2019-11-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update name of the NILFS2 specific package
    
    Upstream NILFS project calls the package nilfs-utils [1][2].  Arch Linux
    / CentOS / Fedora / OpenSUSE use the upstream name.  However Debian /
    Ubuntu name it nilfs-tools [3] instead.
    
    Document the needed software as:
    
        nilfs-utils / nilfs-tools
    
    Upstream name first separated by slash from alternative names
    distributions use.
    
    [1] NILFS Download page
        https://nilfs.sourceforge.io/en/download.html
    [2] NILFS Public Git Repositories
        https://nilfs.sourceforge.io/en/git_repos.html
    [3] Debian package: nilfs-tools
        https://packages.debian.org/sid/nilfs-tools

2019-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing libuuid-devel build dependency for Fedora into README

2019-10-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid crash reading JFS usage on Fedora 30 (!49)(#794947)
    
    Running JFS read usage test on Fedora 30 fails like this:
    
        $ ./test_SupportedFileSystems --gtest_filter='*ReadUsage/jfs'
    ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs
        unknown file: Failure
        C++ exception with description "std::bad_alloc" thrown in the test body.
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (41833 ms)
    
    However the same test passes on Fedora 29, Fedora 31 Beta, CentOS 7,
    Debian 10 and Ubuntu 18.04 LTS.
    
    Also running GParted on Fedora 30 crashes just the same when reading JFS
    usage:
    
        # gparted
        GParted 1.0.0
        configuration --enable-libparted-dmraid --enable-online-resize
        libparted 3.2
        terminate called after throwing an instance of 'std::bad_alloc'
          what():  std::bad_alloc
        /usr/bin/gparted: line 202: 19218 Aborted                 (core dumped) $BASE_CMD
    
    Running jfs_debugfs to query the file system usage the same way GParted
    does produces an infinite amount of repeating output:
    
        # echo dm | jfs_debugfs /dev/sdb1
    
    So jfs_debugfs gets stuck in an infinite loop inside the dmap subcommand
    when it encounters EOF.  GParted and the read JFS usage test read this
    output until memory is exhausted and crash.  This is exactly what was
    happening in closed bug 794947.  Even installed jfsutils from Fedora 29
    on Fedora 30 and visa versa.  jfs_debugfs still produced an infinite
    amount of output on Fedora 30 and worked correctly on Fedora 29.  So
    it's not the build of jfsutils, but something in the OS that is making
    the difference!
    
    Anyway fix by providing the instruction to exit from the dmap
    subcommand, and quit from jfs_debugfs itself, like this:
    
        # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1
    
    Bug 794947 - gparted hangs when sees JFS partition on discovering
                 partitions
    Closes !49 - Add file system interface tests

2019-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Accept FS usage figures within significant unallocated threshold (!49)
    
    So far the read file system usage figures, read via the file system
    interface classes using file system specific tools, have been checked to
    the exact sector for:
         0 <= used <= size
         0 <= unused <= size
         unallocated = 0
         used + unused = size
    
    However for JFS and NTFS this fails like this:
    
        # ./test_SupportedFileSystems --gtest_filter='*ReadUsage/*' | fgrep ' ms'
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs (335 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/exfat (0 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext2 (38 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext3 (131 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext4 (32 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/f2fs (47 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/fat16 (19 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/fat32 (48 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/hfs (0 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/hfsplus (0 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (73 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/linuxswap (20 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/luks (0 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/lvm2pv (410 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/minix (0 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2 (226 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 (56 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/reiser4 (49 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/reiserfs (139 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/udf (34 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/xfs (67 ms)
        [----------] 21 tests from My/SupportedFileSystemsTest (1726 ms total)
        [==========] 21 tests from 1 test case ran. (1726 ms total)
    
        # ./test_SupportedFileSystems --gtest_filter='*ReadUsage/jfs:*ReadUsage/ntfs'
        Running main() from test_SupportedFileSystems.cc
        Note: Google Test filter = *ReadUsage/jfs:*ReadUsage/ntfs
        [==========] Running 2 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 2 tests from My/SupportedFileSystemsTest
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs
        test_SupportedFileSystems.cc:465: Failure
        Expected equality of these values:
          m_partition.sectors_unallocated
            Which is: 2472
          0
        test_SupportedFileSystems.cc:517: Failure
        Expected equality of these values:
          m_partition.sectors_used + m_partition.sectors_unused
            Which is: 521816
          m_partition.get_sector_length()
            Which is: 524288
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (36 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs
        test_SupportedFileSystems.cc:465: Failure
        Expected equality of these values:
          m_partition.sectors_unallocated
            Which is: 8
          0
        test_SupportedFileSystems.cc:517: Failure
        Expected equality of these values:
          m_partition.sectors_used + m_partition.sectors_unused
            Which is: 524280
          m_partition.get_sector_length()
            Which is: 524288
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 (35 ms)
        [----------] 2 tests from My/SupportedFileSystemsTest (71 ms total)
    
        [----------] Global test environment tear-down
        [==========] 2 tests from 1 test case ran. (72 ms total)
        [  PASSED  ] 0 tests.
        [  FAILED  ] 2 tests, listed below:
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23
    
         2 FAILED TESTS
    
    So JFS is reporting 2472 unallocated sectors in a size of 524288 sectors
    and NTFS is reporting 8 unallocated sectors in the same size.  This
    exact issue is already solved for GParted so that it doesn't show a
    small amount of unallocated space by commits [1][2] from Bug 499202 [3].
    
    Fix the same way, use the accessors to the file system usage figures
    which don't show unallocated space when it is below the significant
    threshold.
    
    [1] b5c80f18a9ce27fda2b11e9b590d7f856209ac32
        Enhance calculation of significant unallocated space (#499202)
    
    [2] 7ebedc4bb3b81e85fb4c628a2a05308ada147d68
        Don't show intrinsic unallocated space (#499202)
    
    [3] Bug 499202 - gparted does not see the difference if partition size
                     differs from filesystem size
        https://bugzilla.gnome.org/show_bug.cgi?id=499202
    
    Closes !49 - Add file system interface tests

2019-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Skip Check MINIX file system interface test (!49)
    
    Checking a MINIX V3 file system fails like this:
    
        $ ./test_SupportedFileSystems --gtest_filter='*Check/minix'
    ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndCheck/minix
        test_SupportedFileSystems.cc:554: Failure
        Value of: m_fs_object->check_repair(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        mkfs.minix -3 '/home/centos/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (SUCCESS)
        87392 inodes
        262144 blocks
        Firstdatazone=5507 (5507)
        Zonesize=1024
        Maxsize=2147483647
    
        fsck.minix '/home/centos/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
        fsck.minix from util-linux 2.23.2
        bad magic number in super-block
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndCheck/minix, where GetParam() = 21 (182 ms)
    
    fsck.minix doesn't support checking MINIX V3 file systems until this
    commit, first included in util-linux 2.27 released 2015-09-07.
    
        https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=86a9f3dad58addb50eca9daa9d233827a005dad7
        fsck.minix: add minix v3 support
    
    CentOS 7 only includes util-linux 2.23.2 so is affected by this, however
    Ubuntu 18.04 LTS includes util-linux 2.31.1 so is not affected.
    
    Just always skip this test for now.  Plan to re-enable later when the
    oldest supported distributions and GitLab CI images include the needed
    util-linux release.
    
    Closes !49 - Add file system interface tests

2019-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Write new UUID to JFS before testing reading UUID (!49)
    
    Testing reading the UUID from a newly created JFS was failing like this:
    
        $ ./test_SupportedFileSystems --gtest_filter='*ReadUUID/jfs'
    ...
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/jfs
        test_SupportedFileSystems.cc:552: Failure
        Expected: (m_partition.uuid.size()) >= (9U), actual: 0 vs 9
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/jfs, where GetParam() = 17 (57 ms)
    
    Mkfs.jfs creates a file system as version 1.  It does have a UUID and
    blkid can report it, but jfs_tune doesn't report it.
    
        $ touch -s 256M test_jfs.img
        $ mkfs.jfs -q test_jfs.img
        mkfs.jfs version 1.1.15, 04-Mar-2011
    
        Format completed successfully.
    
        262144 kilobytes total disk space.
        $ blkid test_jfs.img
        test_jfs.img: UUID="6b0bb46a-a240-47b4-89ab-1fe759aa572d" TYPE="jfs"
    
        $ jfs_tune -l test_jfs.img | egrep 'version|UUID'
        jfs_tune version 1.1.15, 04-Mar-2011
        JFS version:                1
    
        $ hexdump -C test_jfs.img
        00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        00008000  4a 46 53 31 01 00 00 00  58 f6 07 00 00 00 00 00  |JFS1....X.......|
    Version >---------------- ^^ ^^ ^^ ^^
    ...
        00008080  00 00 00 00 00 00 00 00  6b 0b b4 6a a2 40 47 b4  |........k..j.@G.|
        00008090  89 ab 1f e7 59 aa 57 2d  00 00 00 00 00 00 00 00  |....Y.W-........|
    UUID >-------------------------------- ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
                  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
    
    However writing a new UUID to the JFS also updates the version to 2 and
    allows jfs_tune to report the UUID.
    
        $ jfs_tune -U random test_jfs.img
        jfs_tune version 1.1.15, 04-Mar-2011
        UUID updated successfully.
    
        $ blkid test_jfs.img
        test_jfs.img: UUID="6374ec58-3568-4ffb-bea9-ff76bf5c192f" TYPE="jfs"
    
        $ jfs_tune -l test_jfs.img | egrep 'version|UUID'
        jfs_tune version 1.1.15, 04-Mar-2011
        JFS version:            2
        File system UUID:       6374ec58-3568-4ffb-bea9-ff76bf5c192f
        External log UUID:      00000000-0000-0000-0000-000000000000
    
        $ hexdump -C test_jfs.img
        00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        00008000  4a 46 53 31 02 00 00 00  58 f6 07 00 00 00 00 00  |JFS1....X.......|
    Version >---------------- ^^ ^^ ^^ ^^
    ...
        00008080  00 00 00 00 00 00 00 00  63 74 ec 58 35 68 4f fb  |........ct.X5hO.|
        00008090  be a9 ff 76 bf 5c 19 2f  00 00 00 00 00 00 00 00  |...v.\./........|
    New UUID >---------------------------- ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
                  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
    
    Therefore change the CreateAndReadUUID test for JFS to also write a new
    UUID so that it also updates the version to 2, thus allowing jfs_tune to
    report the UUID and the test pass.
    
    Note that GParted doesn't encounter this problem because it used blkid
    by default to report the UUID and only falls back to using the file
    system interface method which calls jfs_tune when blkid is not
    available.
    
    Closes !49 - Add file system interface tests

2019-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Accept reading shorter UUIDs from FAT16/32 file systems (!49)
    
    The tests were failing like this:
    
        $ ./test_SupportedFileSystems --gtest_filter='*CreateAndReadUUID/fat16'
    ....
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16
        test_SupportedFileSystems.cc:552: Failure
        Expected equality of these values:
          m_partition.uuid.size()
            Which is: 9
          36U
            Which is: 36
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16, where GetParam() = 13 (45 ms)
    
    This is because the test was expecting a full 36 character UUID as used
    by Linux file systems.  Also accept shorter 9 character "UUID"s as used
    by FAT16/32 file systems.
    
    Closes !49 - Add file system interface tests

2019-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create loop devices for NILFS2 read and write FS interface tests (!49)
    
    For NILFS2 the read and write tests which use nilfs-tune all fail using
    an image file, even when run as root, however the other tests succeed.
    Selected output from the test program:
    
        # ./test_SupportedFileSystems --gtest_filter='*/nilfs2' | fgrep ' ms'
        [       OK ] My/SupportedFileSystemsTest.Create/nilfs2 (22 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2, where GetParam() = 22 (31 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/nilfs2, where GetParam() = 22 (30 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/nilfs2, where GetParam() = 22 (30 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteLabel/nilfs2, where GetParam() = 22 (37 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUID/nilfs2, where GetParam() = 22 (39 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/nilfs2 (0 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/nilfs2 (0 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/nilfs2 (386 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndShrink/nilfs2 (345 ms)
        [----------] 10 tests from My/SupportedFileSystemsTest (920 ms total)
        [==========] 10 tests from 1 test case ran. (920 ms total)
    
    nilfs-tune fails like this when given an image file:
        # truncate -s 256M test.img
        # mkfs.nilfs2 test.img
        mkfs.nilfs2 (nilfs-utils 2.2.7)
        Start writing file system initial data to the device
               Blocksize:4096  Device:test.img  Device Size:268435456
        File system initialization succeeded !!
        # nilfs-tune -l test.img
        nilfs-tune 2.2.7
        nilfs-tune: test.img: cannot open NILFS
        # echo $?
        1
    
    However using nilfs-tune via a loop device works:
        # losetup --show --find /dev/loop0
        /dev/loop0
        # nilfs-tune -l /dev/loop0
        nilfs-tune 2.2.7
        Filesystem volume name:   (none)
        Filesystem UUID:          fc49912c-4d39-4672-8610-1e1185d0db5f
        Filesystem magic number:  0x3434
        Filesystem revision #:    2.0
        Filesystem features:      (none)
        Filesystem state:         valid
        Filesystem OS type:       Linux
        Block size:               4096
    ...
    
    So nilfs-tune only works with block devices.  Fix by making these tests
    require a loop device and therefore make them root only.  Now these
    tests are skipped as non-root user and pass as root.
    
    Closes !49 - Add file system interface tests

2019-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create loop devices for online resized file system tests (!49)
    
    File systems BTRFS, JFS, NILFS2 and XFS can only be resized while
    mounted, but only root can mount file systems.  Therefore these tests
    fail.  Also BTRFS resize uses 'btrfs filesystem show' to discover the
    devid, which also fails as described in the previous commit message.
    
    Note that root can mount a file system image directly, but that it
    implicitly creates loop device:
        # truncate -s 256M test.img
        # mkfs.xfs test.img
        # mount test.img /mnt/1
    
        # fgrep /mnt/1 /proc/mounts
        /dev/loop0 /mnt/1 xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
        # losetup -a
        /dev/loop0: [64768]:35826659 (/root/test.img)
    
    Therefore make these tests root only and require an explicit loop
    device.  Now these file system resize tests succeed as root and are
    skipped as non-root.
    
    Closes !49 - Add file system interface tests

2019-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create loop devices for BTRFS read file system interface tests (!49)
    
    For BTRFS the read (and resize) tests fail when using an image file,
    however the create, write and check tests pass.  Selected output from
    the test program:
    
        $ ./test_SupportedFileSystems --gtest_filter='*/btrfs' | fgrep ' ms'
        [       OK ] My/SupportedFileSystemsTest.Create/btrfs (43 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs, where GetParam() = 7 (95 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs, where GetParam() = 7 (158 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/btrfs, where GetParam() = 7 (164 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndWriteLabel/btrfs (164 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndWriteUUID/btrfs (132 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/btrfs (129 ms)
        [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/btrfs (0 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/btrfs, where GetParam() = 7 (155 ms)
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndShrink/btrfs, where GetParam() = 7 (97 ms)
        [----------] 10 tests from My/SupportedFileSystemsTest (1137 ms total)
        [==========] 10 tests from 1 test case ran. (1137 ms total)
    
    The read operations fail because 'btrfs filesystem show' doesn't work on
    am image file:
        $ truncate -s 256M test.img
        $ mkfs.btrfs test.img
        btrfs-progs v4.9.1
        See http://btrfs.wiki.kernel.org for more information.
    
        Label:              (null)
        UUID:               de1624ae-39bb-4796-aee4-7ee1fa24c06a
        Node side:          16384
        Sector size:        4096
        Filesystem size:    256.00MiB
        Block group profiles:
          Data:             single
          Metadata:         DUP
          System:           DUP
        SSD detected:       no
        Incompat features:  extref, skinny-metadata
        Number of devices:  1
        Devices:
            ID       SIZE  PATH
             1  256.00MiB  test.img
        $ btrfs filesystem show test.img
        ERROR: not a valid btrfs filesystem: /home/centos/programming/c/gparted/tests/test.img
        $ echo $1
        1
    
    Querying a BTRFS image file also fails as root:
        $ su
        Password:
        # btrfs filesystem show test.img
        ERROR: not a valid btrfs filesystem: /home/centos/programming/c/gparted/tests/test.img
        # echo $1
        1
    
    However querying the BTRFS via a loop device succeeds:
        # losetup --show --find test.img
        /dev/loop0
        # btrfs filesystem show /dev/loop0
        Label: none  uuid: de1624ae-39bb-4796-aee4-7ee1fa24c06a
                Total devices 1 FS bytes used 112.00KiB
                devid    1 size 256.00MiB used 88.00MiB path /root/test.img
    
    There must be some kernel level BTRFS file system device discovery
    happening because now after creating a loop device for the image file,
    the BTRFS can be shown via the image file directly:
        # btrfs filesystem show test.img
        Label: none  uuid: de1624ae-39bb-4796-aee4-7ee1fa24c06a
                Total devices 1 FS bytes used 112.00KiB
                devid    1 size 256.00MiB used 88.00MiB path /root/test.img
    
    Anyway for the BTRFS reading tests make them required a loop device and
    therefore root only.  Now these tests are skipped as non-root user and
    pass as root.
    
    Addressing BTRFS resizing test failures will be handled in a following
    commit.
    
    Closes !49 - Add file system interface tests

2019-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create loop devices for LVM2 PV file system interface tests (!49)
    
    Creating an LVM2 PV as a non-root user on an image file fails like this:
        $ truncate -s 256M test.img
        $ lvm pvcreate `pwd`/test.img
          WARNING: Running as a non-root user. Functionality may be unavailable.
          /run/lvm/lvmetad.socket: access failed: Permission denied
          WARNING: Failed to connect to lvmetad. Falling back to device scanning.
          /run/lock/lvm/P_orphans:aux: open failed: Permission denied
          Can't get lock for orphan PVs.
        $ echo $?
        5
    
    Trying the same as root also fails:
        # truncate -s 256M test.img
        # lvm pvcreate `pwd`/test.img
          Device /root/test.img not found.
        # echo $?
        5
    
    LVM seems strongly predicated on only using block devices [1].  LVM can
    use loop devices though, but loop devices can only be created by root.
        # truncate -s 256M test.img
        # losetup -f --show `pwd`/test.img
        /dev/loop0
        # lvm pvcreate /dev/loop0
          Physical volume "/dev/loop0" successfully created.
        # echo $?
        0
    
    Make the LVM2 PV tests require user root and use loop device over the
    test image.  Tests for the other file system types still directly uses
    the image file.  This makes the LVM2 PV tests pass when run as root, or
    successfully skipped when run as non-root.
    
    [1] lvmconfig --typeconfig default --withcomments --withspace | less
        From the "devices" section of the commented default configuration,
        LVM uses block devices found below /dev, devices provided by udev
        and/or found in sysfs.
    
    Closes !49 - Add file system interface tests

2019-10-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent file system tests core dumping in GitLab CI Ubuntu image (!49)
    
    With the previous commit, execution of test_SupportedFileSystems is
    failing in the GitLab CI Ubuntu image.  Fragment from file
    tests/test-suite.log:
    
        FAIL: test_SupportedFileSystems
        ===============================
    
        Terminate called after throwing an instance of 'Glib::ConvertError'
        Aborted (core dumped)
        FAIL test_SupportedFileSystems (exit status: 134)
    
    This core dump can be re-created locally by (1) removing modprobe from
    the PATH, and (2) executing the test program in the C locale.
    
        $ LC_ALL=C ./test_SupportedFileSystems
        Running main() from test_SupportedFileSystems.cc
        terminate called after throwing an instance of 'Glib::ConvertError'
        Aborted
        $ echo $?
        134
    
    Backtrace from gdb:
        (gdb) backtrace
        #0  0x00007f4f93002337 in __GI_raise (sig=sig@entry=6)
            at ../nptl/sysdeps/unix/sysv/linux/raise.c:55
        #1  0x00007f4f93003a28 in __GI_abort () at abort.c:90
        #2  0x00007f4f93b2e7d5 in __gnu_cxx::__verbose_terminate_handler() ()
            at ../../../../libstdc++-v3/libsupc++/vterminate.cc:95
        #3  0x00007f4f93b2c746 in __cxxabiv1::__terminate(void (*)()) (handler=<optimized out>)
            at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:38
        #4  0x00007f4f93b2c773 in std::terminate() ()
            at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48
        #5  0x00007f4f93b2c993 in __cxxabiv1::__cxa_throw(void*, std::type_info*, void (*)(void*))
            (obj=0x260d4b0, tinfo=0x7f4f966c1930 <typeinfo for Glib::ConvertError>, dest=0x7f4f96486fa0 <Glib::ConvertError::~ConvertError()>)
            at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:87
        #6  0x00007f4f96486e27 in Glib::ConvertError::throw_func(_GError*) (gobject=0x260bf90) at convert.cc:329
        #7  0x00007f4f9649b5d7 in Glib::Error::throw_exception(_GError*) (gobject=0x260bf90) at error.cc:175
        #8  0x00007f4f964a7155 in Glib::operator<<(std::ostream&, Glib::ustring const&)
            (os=warning: RTTI symbol not found for class 'std::ostream' ..., utf8_string=...) at ustring.cc:1430
        #9  0x000000000044d66f in GParted::Utils::execute_command(Glib::ustring const&, char const*, Glib::ustring&, Glib::ustring&, bool)
            (command=..., input=input@entry=0x0, output=..., error=..., use_C_locale=use_C_locale@entry=true)
            at ../src/Utils.cc:688
        #10 0x000000000044dae9 in GParted::Utils::kernel_supports_fs(Glib::ustring const&)
            (use_C_locale=true, error=..., output=..., command=...)
            at ../src/Utils.cc:659
        #11 0x000000000044dae9 in GParted::Utils::kernel_supports_fs(Glib::ustring const&) (fs=...)
            at ../src/Utils.cc:480
        #12 0x0000000000460008 in GParted::jfs::get_filesystem_support() (this=0x25e8e60)
            at ../src/jfs.cc:59
        #13 0x00000000004464f9 in GParted::SupportedFileSystems::find_supported_filesystems() (this=0x25e8690)
            at ../src/SupportedFileSystems.cc:120
        #14 0x0000000000412360 in GParted::SupportedFileSystemsTest::setup_supported_filesystems() ()
            at test_SupportedFileSystems.cc:278
        #15 0x00000000004151b0 in GParted::SupportedFileSystemsTest::get_supported_fstypes() ()
            at test_SupportedFileSystems.cc:256
        #16 0x00000000004152c0 in GParted::gtest_MySupportedFileSystemsTest_EvalGenerator_() ()
            at test_SupportedFileSystems.cc:495
        #17 0x000000000041c7d6 in testing::internal::ParameterizedTestCaseInfo<GParted::SupportedFileSystemsTest>::RegisterTests()
            (this=0x2528ac0) at ../lib/gtest/include/gtest/internal/gtest-param-util.h:549
        #18 0x0000000000479fb5 in testing::internal::UnitTestImpl::RegisterParameterizedTests() (this=0x25288d0)
            at ./include/gtest/internal/gtest-param-util.h:709
        #19 0x0000000000479fb5 in testing::internal::UnitTestImpl::RegisterParameterizedTests()
            (this=this@entry=0x2528800) at ./src/gtest.cc:2658
        #20 0x000000000048a001 in testing::internal::UnitTestImpl::PostFlagParsingInit() (this=0x2528800)
            at ./src/gtest.cc:4980
        #21 0x000000000049e399 in testing::internal::InitGoogleTestImpl<char>(int*, char**)
            (argc=argc@entry=0x7ffe9d208a3c, argv=argv@entry=0x7ffe9d208b38) at ./src/gtest.cc:5934
        #22 0x000000000048d285 in testing::InitGoogleTest(int*, char**)
            (argc=argc@entry=0x7ffe9d208a3c, argv=argv@entry=0x7ffe9d208b38) at ./src/gtest.cc:5952
        #23 0x0000000000410404 in main(int, char**) (argc=1, argv=0x7ffe9d208b38)
            at test_SupportedFileSystems.cc:557
    
    The test program runs when executed in my locale and produces these
    messages:
    
        $ ./test_SupportedFileSystems
        Running main() from test_SupportedFileSystems.cc
        Failed to execute child process “modprobe” (No such file or directory)
        Failed to execute child process “modprobe” (No such file or directory)
        [==========] Running 210 tests from 1 test case.
    ...
    
    So the test program is aborting when trying to print the failed to
    execute child process message, but only in the C locale.
    
    This doesn't affect the CentOS GitLab CI image because that installs the
    kmod package with modprobe by default, however the Ubuntu image doesn't
    have the kmod package.
    
    Fix this by explicitly installing the kmod package into both the CentOS
    and Ubuntu GitLab CI images.
    
    Closes !49 - Add file system interface tests

2019-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extend tests to all fully supported file systems (!49)
    
    Extend testing to all fully supported file systems, those with an
    implemented FileSystem derived class.
    
    Note that in main() GParted threading needs to now be initialised before
    InitGoogleTest() because it calls INSTANTIATE_TEST_CASE_P() which in
    turn calls get_supported_fstypes() which eventually constructs all the
    individual file system interface objects and discovers available
    support, some of which use execute_command().  Example call chain:
        InitGoogleTest()
          INSTANTIATE_TEST_CASE_P()
            get_supported_fstypes()
              setup_supported_filesystems()
                {SupportedFileSystems}->find_supported_filesystems()
                  {btrfs}->get_filesystem_support()
                    Utils::execute_command()
    
    In the CentOS 7 GitLab CI image the EPEL (Extra Packages for Enterprise
    Linux) repository is added to provide f2fs-tools and ntfsprogs.
    
    23 of 210 tests fail on CentOS 7 and 22 on Ubuntu 18.04 LTS.  The
    following commits will resolve these test failures.
    
        $ ./test_SupportedFileSystems
        Running main() from test_SupportedFileSystems.cc
        [==========] Running 210 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 210 tests from My/SupportedFileSystemsTest
    ...
        [----------] 210 tests from My/SupportedFileSystemsTest (11066 ms total)
    
        [----------] Global test environment tear-down
        [==========] 210 tests from 1 test case ran. (11067 ms total)
        [  PASSED  ] 187 tests.
        [  FAILED  ] 23 tests, listed below:
        [  FAILED  ] My/SupportedFileSystemsTest.Create/lvm2pv, where GetParam() = 20
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs, where GetParam() = 7
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/lvm2pv, where GetParam() = 20
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2, where GetParam() = 22
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs, where GetParam() = 7
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/nilfs2, where GetParam() = 22
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/btrfs, where GetParam() = 7
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16, where GetParam() = 13
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat32, where GetParam() = 14
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/jfs, where GetParam() = 17
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/nilfs2, where GetParam() = 22
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteLabel/nilfs2, where GetParam() = 22
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUID/nilfs2, where GetParam() = 22
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndCheck/lvm2pv, where GetParam() = 20
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndCheck/minix, where GetParam() = 21
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndRemove/lvm2pv, where GetParam() = 20
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/btrfs, where GetParam() = 7
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/lvm2pv, where GetParam() = 20
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/xfs, where GetParam() = 27
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndShrink/btrfs, where GetParam() = 7
        [  FAILED  ] My/SupportedFileSystemsTest.CreateAndShrink/lvm2pv, where GetParam() = 20
    
        23 FAILED TESTS
    
    Closes !49 - Add file system interface tests

2019-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Print file system types in parameterised test names (!49)
    
    Until now the parameterised test values are printed as part of the test
    names as just 0, 1, etc. like this:
    
        $ ./test_SupportedFileSystems
        Running main() from test_SupportedFileSystems.cc
        [==========] Running 20 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 20 tests from My/SupportedFileSystemsTest
        [ RUN      ] My/SupportedFileSystemsTest.Create/0
        [       OK ] My/SupportedFileSystemsTest.Create/0 (48 ms)
        [ RUN      ] My/SupportedFileSystemsTest.Create/1
        [       OK ] My/SupportedFileSystemsTest.Create/1 (11 ms)
    
    Provide the file system types as the names for the parameterised test
    values [1].  Now the test names are printed like this:
    
        $ ./test_SupportedFileSystems
        Running main() from test_SupportedFileSystems.cc
        [==========] Running 20 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 20 tests from My/SupportedFileSystemsTest
        [ RUN      ] My/SupportedFileSystemsTest.Create/ext2
        [       OK ] My/SupportedFileSystemsTest.Create/ext2 (51 ms)
        [ RUN      ] My/SupportedFileSystemsTest.Create/linuxswap
        [       OK ] My/SupportedFileSystemsTest.Create/linuxswap (11 ms)
    
    Also use these Google Test name friendly ASCII alphanumeric only names
    everywhere the file system type needs to be reported in this test
    program.
    
    [1] Specifying Names for Value-Parameterized Test Parameters
        https://github.com/google/googletest/blob/v1.8.x/googletest/docs/advanced.md#specifying-names-for-value-parameterized-test-parameters
    
    Closes !49 - Add file system interface tests

2019-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add testing of linux-swap using Value-Parameterised Google Tests (!49)
    
    Use Google Test Value-Parameterised to call every test for both ext2
    and linux-swap.
        https://github.com/google/googletest/blob/v1.8.x/googletest/docs/advanced.md#value-parameterized-tests
    
    Running the test now looks like this:
    
        $ ./test_SupportedFileSystems
        Running main() from test_SupportedFileSystems.cc
        [==========] Running 20 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 20 tests from My/SupportedFileSystemsTest
        [ RUN      ] My/SupportedFileSystemsTest.Create/0
        [       OK ] My/SupportedFileSystemsTest.Create/0 (97 ms)
        [ RUN      ] My/SupportedFileSystemsTest.Create/1
        [       OK ] My/SupportedFileSystemsTest.Create/1 (15 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/0 (106 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/1 (14 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadLabel/0 (95 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadLabel/1 (23 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUUID/0 (99 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndReadUUID/1 (22 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteLabel/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndWriteLabel/0 (102 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteLabel/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndWriteLabel/1 (22 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUID/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndWriteUUID/0 (101 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUID/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndWriteUUID/1 (21 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndCheck/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/0 (153 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndCheck/1
        test_SupportedFileSystems.cc:424: Skip test.  check not supported or support not found
        [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/1 (0 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndRemove/0
        test_SupportedFileSystems.cc:437: Skip test.  remove not supported or support not found
        [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/0 (0 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndRemove/1
        test_SupportedFileSystems.cc:437: Skip test.  remove not supported or support not found
        [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/1 (0 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/0 (266 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/1 (32 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndShrink/0
        [       OK ] My/SupportedFileSystemsTest.CreateAndShrink/0 (111 ms)
        [ RUN      ] My/SupportedFileSystemsTest.CreateAndShrink/1
        [       OK ] My/SupportedFileSystemsTest.CreateAndShrink/1 (28 ms)
        [----------] 20 tests from My/SupportedFileSystemsTest (1311 ms total)
    
        [----------] Global test environment tear-down
        [==========] 20 tests from 1 test case ran. (1342 ms total)
        [  PASSED  ] 20 tests.
    
    Closes !49 - Add file system interface tests

2019-09-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to testing ext2 interface via SupportedFilesystems class (!49)
    
    Replace directly using ext2 derived FileSystem interface class with
    using the SupportedFileSystems class.  This is a step in getting ready
    for testing all the GParted file system interface classes in one go.
    
    Closes !49 - Add file system interface tests

2019-07-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Split FILESYSTEMS and FILESYSTEM_MAP into separate module (!49)
    
    GParted_Core::FILESYSTEMS and ::FILESYSTEM_MAP and the methods that
    query and manipulate them are self-contained.  Therefore move them into
    a separate SupportedFileSystems module.
    
    Also having a single class maintaining all FileSystem interface objects
    will make testing all the file system types much easier as there will be
    no need to duplicate this functionality in the test.
    
    Closes !49 - Add file system interface tests

2019-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add offline ext2 resizing tests (!49)
    
    Closes !49 - Add file system interface tests

2019-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add simple ext2 write tests: label, UUID, check and remove (!49)
    
    Closes !49 - Add file system interface tests

2019-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reload Partition object after FS creation in read tests (!49)
    
    Here are the errors reported in the deliberately broken
    CreateAndReadLabel test from the previous commit message:
    
        [ RUN      ] ext2Test.CreateAndReadLabel
        test_ext2.cc:311: Failure
        Value of: m_partition.get_messages().empty()
          Actual: false
        Expected: true
        Partition messages:
        e2label: No such file or directory while trying to open /does_not_exist/test_ext2.img
        Couldn't find valid filesystem superblock.
    
        [  FAILED  ] ext2Test.CreateAndReadLabel (77 ms)
    
    Even though the test was deliberately broken by setting the wrong path
    for the file system image and the e2label command failed, apparently
    testing for the expected label still passed.  What happened was that the
    desired "TEST_LABEL" has to be in the Partition object and then the file
    system was created.  Then reading the file system label failed, however
    "TEST_LABEL" was already set in the Partition object so it matched.
    Reading the label is unique among the read actions of usage, label and
    UUID as the others don't need to be set before the file system is
    created.  GParted doesn't encounter this issue because when refreshing
    devices it creates new blank Partition objects and then performs the
    read actions to populate them.
    
    Fix by resetting the Partition object back to only containing basic
    information before all the reading file system information tests, even
    though it is only needed in the read label case.  This also better
    reflects how GParted works.
    
    Now with the same deliberate brokenness the test also reports the label
    does not match it's expected value:
    
        $ ./test_ext2 --gtest_filter='ext2Test.CreateAndReadLabel'
        Running main() from test_ext2.cc
        Note: Google Test filter = ext2Test.CreateAndReadLabel
        [==========] Running 1 test from 1 test case.
        [----------] Global test environment set-up.
        [----------] 1 test from ext2Test
        [ RUN      ] ext2Test.CreateAndReadLabel
        test_ext2.cc:322: Failure
        Expected equality of these values:
          fs_label
            Which is: "TEST_LABEL"
          m_partition.get_filesystem_label().c_str()
            Which is: ""
        test_ext2.cc:272: Failure
        Value of: m_partition.get_messages().empty()
          Actual: false
        Expected: true
        Partition messages:
        e2label: No such file or directory while trying to open /does_not_exist/test_ext2.img
        Couldn't find valid filesystem superblock.
    
        [  FAILED  ] ext2Test.CreateAndReadLabel (70 ms)
        [----------] 1 test from ext2Test (70 ms total)
    
        [----------] Global test environment tear-down
        [==========] 1 test from 1 test case ran. (75 ms total)
        [  PASSED  ] 0 tests.
        [  FAILED  ] 1 test, listed below:
        [  FAILED  ] ext2Test.CreateAndReadLabel
    
         1 FAILED TEST
    
    Closes !49 - Add file system interface tests

2019-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add ext2 reading tests: usage, label and UUID (!49)
    
    The file system reading methods report errors into Partition messages
    because they are used as part of the GParted refresh, rather than
    reporting errors into OperationDetails used when applying operations.
    Therefore test for no messages for success and print the messages on
    failure.
    
    For example, temporarily breaking the read label test code by setting
    the wrong file system image name produces this:
    
        $ ./test_ext2 --gtest_filter='ext2Test.CreateAndReadLabel'
        Running main() from test_ext2.cc
        Note: Google Test filter = ext2Test.CreateAndReadLabel
        [==========] Running 1 test from 1 test case.
        [----------] Global test environment set-up.
        [----------] 1 test from ext2Test
        [ RUN      ] ext2Test.CreateAndReadLabel
        test_ext2.cc:311: Failure
        Value of: m_partition.get_messages().empty()
          Actual: false
        Expected: true
        Partition messages:
        e2label: No such file or directory while trying to open /does_not_exist/test_ext2.img
        Couldn't find valid filesystem superblock.
    
        [  FAILED  ] ext2Test.CreateAndReadLabel (77 ms)
        [----------] 1 test from ext2Test (77 ms total)
    
        [----------] Global test environment tear-down
        [==========] 1 test from 1 test case ran. (85 ms total)
        [  PASSED  ] 0 tests.
        [  FAILED  ] 1 test, listed below:
        [  FAILED  ] ext2Test.CreateAndReadLabel
    
         1 FAILED TEST
        $ echo $?
        1
    
    Closes !49 - Add file system interface tests

2019-10-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Strip XML markup from the printed operation details (!49)
    
    As seen in the first commit message, operation detail text is XML
    encoded.  This makes it harder to read, especially commands which often
    have single quotes encoded as &apos;.   For example:
    
        <b><i>mkfs.ext2 -F -L &apos;&apos; &apos;/home/centos/programming/c/gparted/tests/test_ext2.img&apos;</i></b>
    
    Strip this encoding when printing the operation details.  Now the same
    example looks like:
    
        mkfs.ext2 -F -L '' '/home/centos/programming/c/gparted/tests/test_ext2.img'
    
    Closes !49 - Add file system interface tests

2019-09-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Run test program under xvfb-run to satisfy need for an X11 display (!49)
    
    Running test_ext2 in GitLab Continuous Integration environment fails like
    this:
        (test_ext2:6338): Gtk-WARNING **: 09:06:17.576: cannot open display:
        Running main() from test_ext2.cc
    
    Obviously the GitLab CI environment doesn't have an X11 display, but
    unfortunately this test case code requires one.
    Utils::execute_command() calls Gtk::Main::run() so requires a Gtk::Main
    object constructing and therefore an X11 display, even though this
    program never displays anything graphical.  The call chain is:
        main()                       test_ext2.cc
          Gtk::Main::Main()          gtkmm/gtk/src/main.ccg
            Gtk::Main::init()        [1]
              gtk_init()             gtk/gtk/gtkmain.c [2]
    which exits with a non-zero exit status when the DISPLAY environment
    variable is unset.
    
    Looked at deriving from Gtk::Main class and writing a replacement init()
    method which calls gtk_init_check() instead of gtk_init() but
    Gtk::Main::instance_ is a private member so not accessible in a derived
    class.
    
    Tried using Glib::MainLoop instead of Gtk::Main, but that doesn't
    initialise everything that Gtk::Main(), so the program crashes.
    
    Therefore use xvfb-run [3][4] to run this test program against a virtual
    X11 display when a real display isn't available.  Coded execution of
    xvfb-run into this test program so that it can simply be executed on the
    command line like the other test programs, without having to remember to
    run "xvfb-run ./test_ext2 ...".
    
    [1] Gtk::Main::init()
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.10.1/gtk/src/main.ccg#L287
    [2] gtk_init()
        https://gitlab.gnome.org/GNOME/gtk/blob/3.10.9/gtk/gtkmain.c#L1000
    [3] how to run gtk app on linux without an x server
        https://superuser.com/questions/624918/how-to-run-gtk-app-on-linux-without-an-x-server
    [4] Using GTK without DISPLAY
        https://stackoverflow.com/questions/11694278/using-gtk-without-display
    
    Closes !49 - Add file system interface tests

2019-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add initial create ext2 only FileSystem interface class test (!49)
    
    This is the first step of adding testing of the derived FileSystem
    interface classes which call the file system specific executables.
    Rather than mocking command execution and returned output the tests run
    the real commands, effectively making this integration testing.
    
    Test case setup determines the file system supported actions using
    get_filesystem_support() and individual tests are skipped if a feature
    is not supported, just as GParted does for it's actions.
    
    Each test creates it's own sparse image file and a fresh file system,
    performs a test on one FileSystem interface call and deletes the image
    file.  This makes each test independent and allows them to run as a
    non-root user, provided the file system command itself doesn't require
    root.  Errors reported for a failed interface call will include the
    GParted OperationDetails, which in turn includes the file system
    specific command used and stdout and stderr from it's execution.
    
    For example, temporarily breaking the test code to create a 10 KiB image
    file instead of 256 MiB one produces this:
    
        $ ./test_ext2
        Running main() from test_ext2.cc
        [==========] Running 1 test from 1 test case.
        [----------] Global test environment set-up.
        [----------] 1 test from ext2Test
        [ RUN      ] ext2Test.Create
        test_ext2.cc:199: Failure
        Value of: s_ext2_obj->create(m_partition, m_operation_detail)
          Actual: false
        Expected: true
        Operation details:
        <b><i>mkfs.ext2 -F -L &apos;&apos; &apos;/home/centos/programming/c/gparted/tests/test_ext2.img&apos;</i></b>    00:00:00  (ERROR)
        <i></i>
        <i>mke2fs 1.42.9 (28-Dec-2013)
        /home/centos/programming/c/gparted/tests/test_ext2.img: Not enough space to build proposed filesystem while setting up superblock
        </i>
    
        [  FAILED  ] ext2Test.Create (25 ms)
        [----------] 1 test from ext2Test (25 ms total)
    
        [----------] Global test environment tear-down
        [==========] 1 test from 1 test case ran. (30 ms total)
        [  PASSED  ] 0 tests.
        [  FAILED  ] 1 test, listed below:
        [  FAILED  ] ext2Test.Create
    
         1 FAILED TEST
        $ echo $?
        1
    
    Also as Utils:: and FileSystem::execute_command() are needed, this
    requires linking with GParted_Core for GParted_Core::mainthread and
    therefore with most of the non-UI classes in gpartedbin.
    
    Closes !49 - Add file system interface tests

2019-06-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename enumeration to MENU_LABEL_FILESYSTEM
    
    To match the renaming performed as part of Bug 741424 "Add support for
    GPT partition names".  In particular this is most closely similar to:
        d480800600be714a0e706b51a147d329d8280e52
        Rename enum to OPERATION_LABEL_FILESYSTEM (#741424)

2019-09-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Print OS details in the GitLab CI (!48)
    
    Just a simple debugging aid to have the OS details printed in the GitLab
    CI output.
    
    Closes !48 - Remain with CentOS 7 for GitLab CI

2019-09-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remain with CentOS 7 for GitLab CI (!48)
    
    When GParted GitLab Continuous Integration was setup, CentOS 7 image was
    used for a slow moving distribution and Ubuntu as a different, faster
    moving distribution.
    
    CentOS 8 has recently been released [1].  To avoid automatically
    switching to it when an official CentOS 8 docker image is made available
    [2], explicitly specify the CentOS 7 image.
    
    [1] Release for CentOS Linux 8 and CentOS Streams (2019-09-24)
        https://lists.centos.org/pipermail/centos-announce/2019-September/023449.html
    
    [2] Docker Official Images, The official build of CentOS
        https://hub.docker.com/_/centos/
    
    Closes !48 - Remain with CentOS 7 for GitLab CI

2019-10-02  Marek Černocký <marek.cernocky@advantech.com>

    Updated Czech help translation

2019-10-02  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2019-09-19  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2019-08-22  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2019-08-13  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2019-08-13  Asier Sarasua Garmendia <asier.sarasua@gmail.com>

    Update Basque translation

2019-08-11  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2019-07-22  Mathias L. Baumann <github@supradigital.org>

    Fix invalid substitution in de.po (!47)
    
    Fixes the error:
      (gpartedbin:995): glibmm-WARNING **: 09:11:54.522: invalid
      substitution "%2" in fmt string "%2 Operationen stehen momentan aus."
    
    Closes !47 - Fix invalid substitution in de.po

2019-06-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Erase correct key in unit test PasswordRAMStoreTest.TooLongPassword
    
    Was attempting to erase the wrong key "key-long" for the test.  It
    should be erasing "key-too-long".  Fix this.  Given that that line in
    the test was to erase a non-existent key and confirm failure; the test
    passed before with the wrong non-existent key, and still passes with the
    right non-existent key.  Clearly a cut and paste error as a result of
    copying the previous LongPassword test when initially added in:
        c6657aab9efe8cefece2017bee4bef9ece607e73
        Add unit tests for PasswordRAMStore module (#795617)

2019-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Drop use of long ago removed udevsettle
    
    Separate udevsettle command was merged into udevadm back in udev 117
    (released 2007-11-13) by:
        https://github.com/systemd/systemd/commit/225cb03bd851adc6d269b13bdf2b1bfded2b96b9
        udevadm: merge all udev tools into a single binary
    
    The oldest supported distributions have these much newer versions of
    udev:
      Distro             EOL        udevadm -V
      Debian 8           2020-Apr   215 (combined systemd and udev)
      RHEL / CentOS 7    2024-Jun   219 (combined systemd and udev)
      Ubuntu 16.04 LTS   2021-Apr   229 (combined systemd and udev)

2019-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Order internally detected signatures by increasing offset (!46)(#16)
    
    Along with the previous patch "Avoid reading the same sector multiple
    times in a row (!46)(#16)" internal detection of file system signatures
    now reads the minimum number of sectors in increasing order.
    
    As the code still considers the sector size, it now also reads less
    sectors from devices with larger sectors to get all the signatures.  So
    on a 512 byte sector device it maximally seeks to and reads from these
    byte offsets:
        0, 512, 1024, 65536
    and on a 4096 byte sector device, only from these byte offsets:
        0, 65536
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel
    Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
                 drives

2019-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid reading the same sector multiple times in a row (!46)(#16)
    
    GParted internal file system detection is reading the same sector
    multiple times in a row.  Add an optimisation to only read a sector if
    it is different to the previously read sector.
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel
    Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
                 drives

2019-07-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Just pass sector size to detect_filesystem_internal() (!46)(#16)
    
    After the previous commit the lp_device structure pointer parameter is
    only used to provide sector_size.  Just pass that instead.
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel
    Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
                 drives

2019-07-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to POSIX open() in detect_filesystem_internal() (!46)(#16)
    
    For every partitioned device that GParted scans it triggers a set of
    udev change events from it's internal file system signature detection
    function.  This is the sequence of events:
    
      gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
      gparted    |  ped_device_get("/dev/sdb")
      libparted  |      open("/dev/sdb", O_RDONLY) = 8
      libparted  |      close(8)
      gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |    open("/dev/sdb", O_RDONLY|O_NONBLOCK) = 8
      gparted    |    read(8, ...)
      gparted    |    close(8)
      gparted    |  set_device_from_disk(device, device_path="/dev/sdb")
      gparted    |    get_device(device_path="/dev/sdb", ..., flush=true)
      gparted    |      ped_device_get()
      gparted    |      flush_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |        ped_device_open()
      libparted  |          open("/dev/sdb", O_RDWR) = 8
      gparted    |        ped_device_sync()
      gparted    |        ped_device_close()
      libparted  |          close(8)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|            KERNEL change /devices/.../sdb (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   change /devices/.../sdb (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |        settle_device()
      gparted    |          Utils::execute_command("udevadm settle --timeout=1")
      gparted    |    detect_filesystem(lp_device, NULL, ...)  lp_device->path="/dev/sdb"
      gparted    |      detect_filesystem_internal(lp_device, NULL)  lp_device->path="/dev/sdb"
      gparted    |        ped_device_open()
      libparted  |          open("/dev/sdb", O_RDWR) = 8
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_close()
      libparted  |          close(8)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|            KERNEL change /devices/.../sdb (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   change /devices/.../sdb (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |    get_disk(lp_device, lp_disk, strict=false)
      gparted    |      ped_disk_new(lp_device)  lp_device->path="/dev/sdb"
      libparted  |        open("/dev/sdb", O_RDWR) = 8
      libparted  |        close(8)
      udev(async)|          KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|          KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|          KERNEL change /devices/.../sdb (block)
      udev(async)|          KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|          KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|          UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|          UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|          UDEV   change /devices/.../sdb (block)
      udev(async)|          UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|          UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |      settle_device()
      gparted    |        Utils::execute_command("udevadm settle --timeout=1")
      gparted    |    set_device_partitions()
      gparted    |      detect_filesystem()
      gparted    |      set_partition_label_and_uuid(partition)  partition.get_path()="/dev/sdb1"
      gparted    |        read_label()
      gparted    |          ext2::read_label()
      gparted    |            Utils::execute_command("e2label /dev/sdb1")
    
    Note that the udev block device change events triggered in
    detect_filesystem_internal() occur before the waited for ones in the
    second commit "Wait for udev to recreate /dev/PTN entries when querying
    partition FSs (!46)" in get_disk() so these were already waited for.
    
    The call chain is:
        set_devices_thread()
            set_device_from_disk()
                detect_filesystem()
                    detect_filesystem_internal()
                        ped_device_open()
                        ped_device_read()
                        ped_device_close()
    
    This occurs because file system detection is performed on whole disk
    devices, but the device contains a partition table, so blkid won't
    report any content GParted accepts as a file system, so it tries it's
    own internal detection.
    
    Fix this by changing detect_filesystem_internal() to use POSIX open(),
    read() and close() so the file can be opened read-only and udev change
    events aren't triggered.
    
    Note that when using detect_filesystem_internal() on a partition this
    also changes the device it reads from.  Before it used libparted which
    always reads from the whole disk device, now it reads from the partition
    device.  This doesn't matter because GParted ensures the data is
    consistent between them [2] and blkid reads from each partition device
    which GParted already uses.
    
    As the new code avoids using the libparted API, and just skips to the
    next signature on lseek() and read() errors, it therefore won't generate
    libparted exceptions such as this when scanning very small drives:
        Invalid argument during seek for read on /dev/PTN
    
    [1] f8faee637787329c07771e495c9b26abc9ac1603
        Avoid whole disk FAT being detected as MSDOS partition table
        (#743181)
    
    [2] 3bea067596e3e2d6513cda2a66df1b3e4fa432fb
        Flush devices when scanning to prevent reading stale signatures
        (#723842)
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel
    Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
                 drives

2019-07-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass unmodified parameter to useable_device() as const (!46)
    
    GParted_Core::useable_device() doesn't change the pointed to PedDevice
    structure.  Pass it as const so the compiler enforces this.
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel

2019-07-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to POSIX open() in useable_device() (!46)
    
    For every device that GParted scans, it determines if it can be used by
    attempting to read the first sector.  This is the sequence of events,
    as reported in the previous two commit messages:
    
      gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
      ...
      gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |    ped_device_open()
      libparted  |      open("/dev/sdb", O_RDWR) = 8
      gparted    |    ped_device_read()
      gparted    |    ped_device_close()
      libparted  |      close(8)
      udev(async)|        KERNEL change /devices/.../sdb (block)
      ...
      udev(async)|        UDEV   change /devices/.../sdb (block)
    
    Note that these udev block device change events occur before the ones
    waited for in the first commit "Wait for udev change on /dev/DISK when
    querying whole device FS (!46)" so these were already waited for.
    
    So because libparted only opens devices read-write this triggers a set
    of udev change events for the whole block device, and if the device is
    partitioned, also remove and re-add events for all the partitions.
    
    Switch to using POSIX open(), read() and close() calls so read-only
    access can be specified to avoid the unnecessary udev change events.
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel

2019-07-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wait for udev to recreate /dev/PTN entries when querying partition FSs (!46)
    
    After the previous fix, on my CentOS 7 VM, GParted is now often
    reporting a warning that the /dev/PTN entry is missing when reading the
    label of the file system in the first partition.  This happens
    regardless of the file system type.
    
    Example error for EXT4:
        e2label: No such file or directory while trying to open /dev/sdb1
        Couldn't find valid file system superblock.
    
    Example error for XFS:
        /dev/sdb1: No such file or directory
        fatal error -- couldn't initialize XFS library
    
    As with the case in the previous commit, GParted gets the label via
    blkid instead.
    
    Again with debugging and sleeping in GParted, stracing the GParted
    thread GParted_Core::set_devices_thread() and using 'udevadm monitor' to
    watch udev events the following sequence of events is observed:
    
      gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
      gparted    |  ped_device_get("/dev/sdb")
      libparted  |      open("/dev/sdb", O_RDONLY) = 8
      libparted  |      close(8)
      gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |    ped_device_open()
      libparted  |      open("/dev/sdb", O_RDWR) = 8
      gparted    |    ped_device_read()
      gparted    |    ped_device_close()
      libparted  |      close(8)
      udev(async)|        KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|        KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|        KERNEL change /devices/.../sdb (block)
      udev(async)|        KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|        KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|        UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|        UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|        UDEV   change /devices/.../sdb (block)
      udev(async)|        UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|        UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |  set_device_from_disk(device, device_path="/dev/sdb")
      gparted    |    get_device(device_path="/dev/sdb", ..., flush=true)
      gparted    |      ped_device_get()
      gparted    |      flush_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |        ped_device_open()
      libparted  |          open("/dev/sdb", O_RDWR) = 8
      gparted    |        ped_device_sync()
      gparted    |        ped_device_close()
      libparted  |          close(8)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|            KERNEL change /devices/.../sdb (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   change /devices/.../sdb (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |        settle_device()
      gparted    |          Utils::execute_command("udevadm settle --timeout=1")
      gparted    |    detect_filesystem(lp_device, NULL, ...)  lp_device->path="/dev/sdb"
      gparted    |      detect_filesystem_internal(lp_device, NULL)  lp_device->path="/dev/sdb"
      gparted    |        ped_device_open()
      libparted  |          open("/dev/sdb", O_RDWR) = 8
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_read()
      gparted    |        ped_device_close()
      libparted  |          close(8)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|            KERNEL change /devices/.../sdb (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|            UDEV   change /devices/.../sdb (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |    get_disk(lp_device, lp_disk, strict=false)
      gparted    |      ped_disk_new(lp_device)  lp_device->path="/dev/sdb"
      libparted  |        open("/dev/sdb", O_RDWR) = 8
      libparted  |        close(8)
      udev(async)|          KERNEL remove /devices/.../sdb/sdb1 (block)
      udev(async)|          KERNEL remove /devices/.../sdb/sdb2 (block)
      udev(async)|          KERNEL change /devices/.../sdb (block)
      udev(async)|          KERNEL add    /devices/.../sdb/sdb1 (block)
      udev(async)|          KERNEL add    /devices/.../sdb/sdb2 (block)
      udev(async)|          UDEV   remove /devices/.../sdb/sdb1 (block)
      udev(async)|          UDEV   remove /devices/.../sdb/sdb2 (block)
      udev(async)|          UDEV   change /devices/.../sdb (block)
      udev(async)|          UDEV   add    /devices/.../sdb/sdb1 (block)
      udev(async)|          UDEV   add    /devices/.../sdb/sdb2 (block)
      gparted    |    set_device_partitions()
      gparted    |      detect_filesystem()
      gparted    |      set_partition_label_and_uuid(partition)  partition.get_path()="/dev/sdb1"
      gparted    |        read_label()
      gparted    |          ext2::read_label()
      gparted    |            Utils::execute_command("e2label /dev/sdb1")
    
    So in this case for a partitioned drive, libparted ped_disk_new() is
    opening and closing the device read-write and triggering the udev remove
    and add partition block special entries exactly when the label is trying
    to be read from the first partition, causing the device missing error.
    The call chain is:
        set_devices_thread()
            set_device_from_disk()
                get_disk()
                    ped_disk_new()
    
    Looking at the source for ped_disk_new() [1] it is calling
    ped_device_open() and ped_device_close(), hence why it is opening the
    device read-write and triggering the udev events.
    
    Looking back at commit "Wait for udev to recreate /dev/PTN entries when
    calibrating (#762941)" [2] and re-testing it, the udev events were also
    caused by ped_disk_new() with this call chain:
        apply_operation_to_disk()
            calibrate_partition()
                get_disk()
                    ped_disk_new()
    
    Fix this probe case and keep the fix for the previous calibrate case by
    moving the waiting for udev events from calibrate_partition() into
    get_disk(), right after ped_disk_new().  The maximum wait time is
    shortened to the shorter 1 second probing timeout to avoid the longer
    10 second apply timeout in this probing case.  The calibrate case commit
    message said "The longest I have seen udev take to do this is 0.80
    seconds in a VM".
    
    [1] parted/libparted/disk.c:ped_disk_new()
        http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/disk.c?id=v3.2#n169
    
    [2] fd9013d5f6971e9282f019903d6e148e367718bf
        Wait for udev to recreate /dev/PTN entries when calibrating
        (#762941)
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel

2019-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wait for udev change on /dev/DISK when querying whole device FS (!46)
    
    GParted nearly always shows this warning against a whole disk device
    FAT32 file system on my development VMs:
        plain floppy: device "/dev/sdb" busy (Resource temporarily
        unavailable): Cannot initialize '::'
        mlabel: Cannot initialize drive
    However GParted does get the label via blkid instead.  Occasionally
    everything works correctly and there is no warning.
    
    Never found a similar error for any other file system on a whole disk
    device.  The timing never seems to clash.
    
    Remember that when a writable file descriptor of a disk device is
    closed, udev events are triggered which update the kernel and /dev
    entries for any partition changes.  (This is in addition to coding which
    has always existed in the partitioning tools, including fdisk and
    parted, to inform the kernel, but not create /dev entries, of partition
    changes).
    
    With debugging and sleeping in GParted, stracing the GParted thread
    GParted_Core::set_devices_thread() and using 'udevadm monitor' to watch
    udev events the following sequence of events is observed:
    
      gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
      gparted    |  ped_device_get("/dev/sdb")
      libparted  |      open("/dev/sdb", O_RDONLY) = 8
      libparted  |      close(8)
      gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |    ped_device_open()
      libparted  |      open("/dev/sdb", O_RDWR) = 8
      gparted    |    ped_device_read()
      gparted    |    ped_device_close()
      libparted  |      close(8)
      udev(async)|        KERNEL change /devices/.../sdb (block)
      udev(async)|        KERNEL change /devices/.../sdb (block)
      udev(async)|        UDEV   change /devices/.../sdb (block)
      udev(async)|        UDEV   change /devices/.../sdb (block)
      gparted    |  set_device_from_disk(device, device_path="/dev/sdb")
      gparted    |    get_device(device_path="/dev/sdb", ..., flush=true)
      gparted    |      ped_device_get()
      gparted    |      flush_device(lp_device)  lp_device->path="/dev/sdb"
      gparted    |        ped_device_open()
      libparted  |          open("/dev/sdb", O_RDWR) = 8
      gparted    |        ped_device_sync()
      gparted    |        ped_device_close()
      libparted  |          close(8)
      udev(async)|            KERNEL change /devices/.../sdb (block)
      udev(async)|            KERNEL change /devices/.../sdb (block)
      udev(async)|            UDEV   change /devices/.../sdb (block)
      udev(async)|            UDEV   change /devices/.../sdb (block)
      gparted    |    set_device_one_partition()
      gparted    |      set_partition_label_and_uuid()
      gparted    |        read_label()
      gparted    |          fat16::read_label()
      gparted    |            Utils::execute_command("mlabel -s :: -i /dev/sdb")
    
    This sequence of events only shows which close()s by libparted trigger
    udev events.  It does not show that processing those events are
    asynchronous and overlap with GParted executing mlabel, causing the
    device busy error.
    
    As libparted's ped_device_open() doesn't offer a way to specify that a
    device will only be used for reading, it always opens it read-write
    [1][2].  Hence this sequence in GParted_Core::flush_device():
        ped_device_open()
        ped_device_sync()
        ped_device_close()
    always triggers udev change events on the whole disk device.  Fix by
    waiting for those udev events to complete.
    
    [1] libparted documentation, PedDevice, ped_device_open()
        https://www.gnu.org/software/parted/api/group__PedDevice.html#ga7c87bd06e76553c8ff3262b5e6ca256
    
    [2] parted/libparted/arch/linux.c:linux_open()
        http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?id=v3.2#n1628
    
    Closes !46 - Whole device FAT32 file system reports device busy warning
                 from mlabel

2019-07-18  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2019-04-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Drop use of long ago removed udevinfo
    
    The last distribution to include the separate 'udevinfo' command was
    RHEL / CentOS 5 with udev 095.  All supported distributions have much
    newer versions of udev and instead have the 'udevadm' command.

2019-06-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to faster minfo and mdir to read FAT16/32 usage (#569921)
    
    A user reported that GParted was slow to refresh on FAT32 file systems:
    "can take very long, up to several minutes; can be reproduced by running
    dosfsck manually".  This is because the file system was large and almost
    full, and GParted performs a file system check just to to report the
    file system usage.
    
    Created a 4 GiB FAT32 file system and almost filled it with 4 KiB files,
    just over 970,000 files.
    
        # df -k /mnt/2
        Filesystem     1K-blocks     Used Available Used% Mounted on
        /dev/sdb2        4186108 39155384    270724   94% /mnt/2
        # df -i /mnt/2
        Filesystem     Inodes IUsed IFree IUse% Mounted on
        /dev/sdb2           0     0     0     - /mnt/2
        # find /mnt/2 -type f -print | wc -l
        971059
        # find /mnt/2 -type d -print | wc -l
        1949
    
    Testing performance of the current fsck.fat:
    
        # time fsck.fat -n -v /dev/sdb2 | \
        > egrep 'bytes per logical sector|bytes per cluster|sectors total|clusters$'
               512 bytes per logical sector
              4096 bytes per cluster
           8388608 sectors total
        /dev/sdb2: 973008 files, 978846/1046527 clusters
    
        real    0m11.552s
        user    0m2.183s
        sys     0m7.547s
    
    Free sectors in the file system according to fsck.fat:
        (1046527 - 978846) * 4096 / 512 = 541448 sectors
    
    Repeating this test while also using 'blktrace /dev/sdb2' and Ctrl-C
    around the test in a separate terminal, reports these numbers of I/Os
    being performed:
        Read requests   Read bytes
               15,563      165 MiB
    
    Prior to this commit [1] from 0.0.9, GParted used libparted's
    ped_file_system_get_resize_constraint() to report the minimum size to
    which a FAT* file system can be resized.  Use this test program [2] to
    performance test this method:
    
        # time ./fscons /dev/sdb2
        dev=/dev/sdb2
        sector_size=512
        min_size=7909522
        max_size=8388608
    
        real    0m2.673s
        user    0m0.070s
        sys     0m1.834s
    
    Free sectors in the file system according to libparted
    ped_file_system_get_resize_constraint():
        8388608 - 7909522 = 479086 sectors
    
    blktrace reports these numbers of I/Os being performed:
        Read requests   Read bytes
                7,821       71 MiB
    
    So using libparted resize constraint is a bit faster but is still
    reading too much data and is really too slow.  Also when testing GParted
    using this libparted method against a corrupted FAT32 file system, on
    every refresh, one popup dialog is displayed for each error libparted
    detects with the file system, each of which needs acknowledgement.
    Example popup:
    
                         Libparted Error
        \DIRNAME\FILENAME.EXT is 107724k, but is has 1920
        clusters (122880k).
    
                                     [ Cancel ][ Ignore ]
    
    There could be a huge number of such errors in a corrupted file system.
    Not really suitable for use by GParted.
    
    Test the performance of mtools' minfo command to report the file system
    figures:
    
        # time minfo -i /dev/sdb2 :: | \
        > egrep 'sector size:|cluster size:|small size:|big size:|free clusters='
        sector size: 512 bytes
        cluster size: 8 sectors
        small size: 0 sectors
        big size: 8388608 sectors
        free clusters=67681
    
        real    0m0.013s
        user    0m0.004s
        sys     0m0.019s
    
    Free sectors in the file system according to minfo:
        67681 * 8 = 541448 sectors
    
    blktrace reports these numbers of I/Os being performed by minfo:
        Read requests   Read bytes
                    1       16 KiB
    
    This matches with minfo just reading information from the BPB (BIOS
    Parameter Block) [3] from sector 0 and the FS Information Sector [4]
    usually in sector 1.  Note that the free cluster figure reported by
    minfo comes from the FS Information Sector because it only reports it
    for FAT32 file systems, not for FAT16 file systems.  Scanning the File
    Allocation Table (FAT) [5] to count free clusters is exactly what mdir,
    without the '-f' (fast) flag, does.  Test the performance of mdir:
    
        # export MTOOLS_SKIP_CHECK=1
        # time mdir -i /dev/sdb2 ::/ | fgrep 'bytes free'
                                277 221 376 bytes free
    
        real    0m0.023s
        user    0m0.011s
        sys     0m0.023s
    
    Free sectors in the file system according to mdir:
        277221376 / 512 = 541448 sectors
    
    blktrace reports these number of I/Os being performed by mdir:
        Read requests   Read bytes
                    5      448 KiB
    
    So minfo and mdir together provide the needed information and are 2 to 3
    orders of magnitude faster because they only read the needed BPB and FAT
    data from the drive.  Use these together to read the file system usage.
    
    [1] 61cd0ce77879e4af84280ddcf77959ae55885ba4
        lots of stuff and cleanups, including fixing getting used/unused
        space of hfs/hfs+/fat16/fat32
    
    [2] fscons.c
    /* FILE:     fscons.c
     * SYNOPSIS: Report libparted's FS resize limits.
     * BUILD:    gcc -o fscons fscons.c -lparted -lparted-fs-resize
     */
    
    int main(int argc, const char *argv[])
    {
        PedDevice* dev = NULL;
        PedDisk* tab = NULL;
        PedPartition* ptn = NULL;
        PedFileSystem* fs = NULL;
        PedConstraint* cons = NULL;
    
        if (argc != 2)
        {
            fprintf(stderr, "Usage: fscons BLOCKDEV\n");
            exit(1);
        }
    
        dev = ped_device_get(argv[1]);
        if (dev == NULL)
        {
            fprintf(stderr, "ped_device_get(\"%s\") failed\n", argv[1]);
            exit(1);
        }
        printf("dev=%s\n", dev->path);
        printf("sector_size=%ld\n", dev->sector_size);
    
        tab = ped_disk_new(dev);
        if (tab == NULL)
        {
            fprintf(stderr, "ped_disk_new(dev) failed\n");
            exit(1);
        }
    
        ptn = ped_disk_get_partition_by_sector(tab, 0);
        if (ptn == NULL)
        {
            fprintf(stderr, "ped_disk_get_partition(tab, 0) failed\n");
            exit(1);
        }
    
        fs = ped_file_system_open(&ptn->geom);
        if (fs == NULL)
        {
            fprintf(stderr, "ped_file_system_open(&ptn->geom) failed\n");
            exit(1);
        }
    
        cons = ped_file_system_get_resize_constraint(fs);
        if (cons == NULL)
        {
            fprintf(stderr, "ped_file_system_get_resize_constraint(fs) failed\n");
            exit(1);
        }
        printf("min_size=%ld\n", cons->min_size);
        printf("max_size=%ld\n", cons->max_size);
    
        ped_constraint_destroy(cons);
        ped_file_system_close(fs);
        ped_disk_destroy(tab);
        ped_device_destroy(dev);
    
        return 0;
    }
    
    [3] Design of the FAT file system, BIOS Parameter Block
        https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#BIOS_Parameter_Block
    
    [4] Design of the FAT file system, FS Information Sector
        https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#FS_Information_Sector
    
    [5] Design of the FAT file system, File Allocation Table
        https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#File_Allocation_Table
    
    Bug 569921 - dosfsck -n delays device scan

2019-06-22  Goran Vidović <trebelnik2@gmail.com>

    Update Croatian translation

2019-06-19  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2019-06-19  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2019-06-16  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2019-06-11  Curtis Gedak <gedakc@gmail.com>

    Add missing window title to Help Contents dialog (!45)
    
    When GParted is configured with `--disable-doc` the help documentation
    is neither built, nor installed.
    
    With this configuration the Help -> Contents menu displays a message
    dialog indicating the "Documentation is not available".
    
    On GNOME 3 no title is shown; however, on some other graphic toolkits
    / window managers an unspecified title is shown.
    
    For example on GParted Live with Fluxbox the following is displayed:
    
                             Unnamed
                             -------
    
                   Documentation is not available
    
          This build of gparted is configured without documentation.
          Documentation is available at the project web site.
          https://gparted.org
    
                               OK
    
    To address the unspecified title on non-GNOME 3 graphic toolkits, add
    a title that works with and without GNOME 3.
    
    Closes !45 - Add missing window title to Help Contents dialog

2019-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing Device.h include into GParted_Core and Win_GParted
    
    The files GParted_Core.h, GParted_Core.cc and Win_GParted.cc all use the
    Device type but don't include Device.h for it's definition.  Include it.

2019-05-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace partition boundary trimming with bug error messages (#48)
    
    All the dialogs which compose new or modified partition boundaries
    create those partitions within the boundaries of the device.  Therefore
    trimming the partition boundaries to device boundaries never happens.
    So replace this trimming with bug error reports.
    
    Also add bug prefixes to the other error messages in
    GParted_Core::valid_partition() too.
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-05-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space layout update in snap_to_mebibyte/cylinder() (#48)
    
    The previous commit moved the code from GParted_Core to
    Dialog_Base_Partition class without making a single formatting change to
    ensure the code was guaranteed to work the same within that larger
    commit.  Now reformat the code to current layout standards.  Making it a
    separate commit simplifies the effort for both changes and improves
    bisectability.
    
    Additionally to be sure there were no code changes,
    Dialog_Base_Partition.cc was compiled to assembler code with and without
    this change applied and the resultant assembler code compared.  There
    were no differences in the generated assembler code.
    
    Start with the make generated g++ command for compiling
    Dialog_Base_Partition.o; (1) remove the '-g' flag as inserted debugging
    directives do differ; and (2) replace '-c -o Dialog_Base_Partition.o'
    with '-S -o Dialog_Base_Partition.s' to produce assembler output instead
    of object code.
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Snap partition boundaries before dialogs update FS usage (#48)
    
    Move snap_to_*() method calls from the point when all operations are
    added to the list, to earlier when Resize/Move, Paste (into new) and
    Create New dialogs are composing the new partition objects.  In
    particular for the Resize/Move operation, to just before updating the
    file system usage.
    
    This change finally resolves this bug.
    
    Because of the dialog call chains into Dialog_Base_Partition,
    snap_to_alignment() must be added into:
    * Dialog_Base_Partition::prepare_new_partition() for the Resize/Move and
      Paste (into new) dialogs; and
    * Dialog_Partition_New::Get_New_Partition() for the Create New dialog.
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass the current device down to Dialog_Base_Partition class (#48)
    
    The current device has to be passed to the dialog constructors and then
    on to the Dialog_Base_Constructor.  Note that the Dialog_Partition_New
    constructor is already passed the current device, however it still needs
    to pass it on to Dialog_Base_Constructor.
    
    This is ready so that snap_to_*() methods can access the current device
    when they are called from within these dialogs.
    
    * Pass Parameter to Base Class Constructor while creating Derived class
      Object
      https://stackoverflow.com/questions/16585856/pass-parameter-to-base-class-constructor-while-creating-derived-class-object
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update file system usage last in prepare_new_partition() (#48)
    
    Move setting of the new_partition object file system usage to after
    everything else, specifically after free_space_before and strict_start.
    This is because snap_to_*() use free_space_before and strict_start and
    snap_to_alignment() is going to be called before the file system usage
    is updated to avoid the error in this bug report.
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-05-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused error reporting from snap_to_*() (#48)
    
    None of the snap_to_*() methods report any errors so remove the unused
    error parameter and return value.
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-05-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Separate partition alignment from validation (#48)
    
    PATCHSET OVERVIEW
    
    A user had 2 adjacent partitions which were aligned to multiples of
    33553920 bytes (32 MiB - 512 bytes), not MiB or cylinders.  As far as
    GParted is concerned this is not aligned.  The second partition
    contained closed LUKS encrypted data.  Recreate this setup with:
    
        # truncate -s 200G /tmp/disk.img
        # losetup -f --show /tmp/disk.img
        /dev/loop0
        # sfdisk -u S /dev/loop0 << EOF
        65535 2162655 83
        2228190 78904140 83
        EOF
        # partprobe /dev/loop0
        # echo -n badpassword | cryptsetup luksFormat /dev/loop0p2 -
    
    When trying to move the second LUKS encrypted partition to the right by
    any amount, with the default MiB alignment, GParted displays this error
    dialog and fails to even queue the operation:
    
        Could not add this operation to the list
        A partition with used sectors (78907392) greater than its
        length (78905344) is not valid
        [                       OK                               ]
    
    Overview of the steps involved:
    
    1. The Resize/Move dialog composed a new partition to start a whole
       multiple of MiB after the end of the previous non-aligned partition.
       The new partition also had it's size increased to a whole multiple of
       MiB, to 78907392 sectors (38529 MiB) which was 1.59 MiB larger than
       before.  Neither the start or end of the new partition are aligned at
       this point.
    
    2. Win_GParted::activate_resize() applied the change back to the closed
       LUKS partition object, additionally making the used sectors equal to
       the partition size.
       (To match the fact that when opened the LUKS mapping it will
       automatically fill the new larger partition size).
    
    3. GParted_Core::snap_to_mebibyte() then aligned the partition start and
       end to whole MiB boundaries, reducing the partition size in the
       process to 78905344 (38528 MiB).
    
    4. GParted_Core::snap_to_alignment() reported the error saying that it
       couldn't add the operation to the list because it was invalid to have
       the file system used sectors larger than the partition size.
    
    Fix this by having the snap to alignment adjustments applied before the
    dialogs update any associated file system usage.  Specifically the
    Resize/Move, Paste (into new) and Create New dialogs as these are the
    only ones which either create or modify partition boundaries.
    Validation done by snap_to_alignment() will continue to occur at the
    current point when the operation is added to the list.
    
    THIS COMMIT
    
    snap_to_alignment() is doing two different jobs, it is (1) optionally
    adjusting the new partition boundaries for MiB or Cylinder alignment;
    and (2) checking that the partition boundaries and file system usage are
    valid.
    
    Split those into two different functions (1) snap_to_alignment() and
    (2) valid_partition().  For now valid_partition() still calls
    snap_to_alignment() so there is no functional change with this commit.
    
    Closes #48 - Error when moving locked LUKS-encrypted partition

2019-06-09  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2019-06-06  Wolfgang Stöggl <c72578@yahoo.de>

    Update German translation

2019-06-03  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2019-05-22  Félix Piédallu <felix@piedallu.me>

    Fix test (dentry->d_name is invalidated by closedir...) (!41)
    
    We have to copy the dentry->d_name before calling closedir().  If not,
    the string points to nothing and the test fails (It does not fail all
    the time, but only by chance).
    
    Confirmed using valgrind.  Selected output from running the unit test
    under valgrind:
    
      $ valgrind --track-origins=yes ./test_blockSpecial
      ==25110== Memcheck, a memory error detector
      ...
      ==25110== Command: ./test_BlockSpecial
      ==25110==
      Running main() from src/gtest_main.cc
      [==========] Running 26 tests from 1 test case.
      [----------] Global test environment set-up.
      [----------] 26 tests from BlockSpecialTest
      ...
      [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
      ==25110== Invalid read of size 1
      ==25110==    at 0x4C2C9B2: strlen (vg_replace_strmem.c:458)
      ==25110==    by 0x40E7C4: length (char_traits.h:259)
      ==25110==    by 0x40E7C4: append (basic_string.h:1009)
      ==25110==    by 0x40E7C4: operator+<char, std::char_traits<char>, std::allocator<char> > (basic_string.h:2468)
      ==25110==    by 0x40E7C4: get_link_name (test_BlockSpecial.cc:156)
      ==25110==    by 0x40E7C4: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
      ...
      =25110==  Address 0x1231ea93 is 115 bytes inside a block of size 32,816 free'd
      ==25110==    at 0x4C2ACBD: free (vg_replace_malloc.c:530)
      ==25110==    by 0x9F773AC: closedir (in /usr/lib64/libc-2.17.so)
      ==25110==    by 0x40E7AC: get_link_name (test_BlockSpecial.cc:153)
      ==25110==    by 0x40E7AC: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
      ...
      ==25110==  Block was alloc'd at
      ==25110==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
      ==25110==    by 0x9F77280: __alloc_dir (in /usr/lib64/libc-2.17.so)
      ==25110==    by 0x40E746: get_link_name (test_BlockSpecial.cc:134)
      ==25110==    by 0x40E746: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
      ...
      ==25110== Invalid read of size 1
      ==25110==    at 0x4C2E220: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:1022)
      ==25110==    by 0x953A997: std::string::append(char const*, unsigned long) (in /usr/lib64/libstdc++.so.6.0.19)
      ==25110==    by 0x40E7D2: append (basic_string.h:1009)
      ==25110==    by 0x40E7D2: operator+<char, std::char_traits<char>, std::allocator<char> > (basic_string.h:2468)
      ==25110==    by 0x40E7D2: get_link_name (test_BlockSpecial.cc:156)
      ==25110==    by 0x40E7D2: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
      ...
      ==25110==  Address 0x1231ea93 is 115 bytes inside a block of size 32,816 free'd
      ==25110==    at 0x4C2ACBD: free (vg_replace_malloc.c:530)
      ==25110==    by 0x9F773AC: closedir (in /usr/lib64/libc-2.17.so)
      ==25110==    by 0x40E7AC: get_link_name (test_BlockSpecial.cc:153)
      ==25110==    by 0x40E7AC: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
      ...
      ==25110==  Block was alloc'd at
      ==25110==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
      ==25110==    by 0x9F77280: __alloc_dir (in /usr/lib64/libc-2.17.so)
      ==25110==    by 0x40E746: get_link_name (test_BlockSpecial.cc:134)
      ==25110==    by 0x40E746: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
      ...
      [       OK ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (50 ms)
    
    Selected lines from test_BlockSpecial.cc:
    
      132  static std::string get_link_name()
      133  {
      134          DIR * dir = opendir( "/dev/disk/by-id" );
      ...
      141          bool found = false;
      142          struct dirent * dentry;
      143          // Silence GCC [-Wparentheses] warning with double parentheses
      144          while ( ( dentry = readdir( dir ) ) )
      145          {
      146                  if ( strcmp( dentry->d_name, "." )  != 0 &&
      147                       strcmp( dentry->d_name, ". " ) != 0    )
      148                  {
      149                          found = true;
      150                          break;
      151                  }
      152          }
      153          closedir( dir );
      154
      155          if ( found )
      156                  return std::string( "/dev/disk/by-id/" ) + dentry->d_name;
    
    So the memory referred to by dentry was allocated on line 134, freed on
    153 and accessed after freed on 156.
    
    Closes !41 - Fix test (dentry->d_name is invalidated by closedir...)

2019-05-29  Curtis Gedak <gedakc@gmail.com>

    Fix link typo in French translation of GParted help manual

2019-05-29  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2019-05-29  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.0.0   ==========

2019-05-29  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2019-05-28  Claude Paroz <claude@2xlibre.net>

    Update French translation

2019-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix reading NTFS usage after resize (#57)
    
    After an NTFS file system has been resized the command GParted currently
    uses to read the file system usage fails like this:
    
        # ntfsinfo --mft /dev/sdb1
        Volume is scheduled for check.
        Please boot into Windows TWICE, or use the 'force' option.
        NOTE: If you had not scheduled check and last time accessed this volume
        using ntfsmount and shutdown system properly, then init scripts in your
        distribution are broken. Please report to your distribution developers
        (NOT to us!) that init scripts kill ntfsmount or mount.ntfs-fuse during
        shutdown instead of proper umount.
        Failed to open '/dev/sdb1'.
    
    Fix by added the '--force' flag as described in the error message.
    
    Closes #57 - NTFS Resize results in Partition Information Warning on
                 Refresh

2019-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report errors correctly on failure to read NTFS usage (#57)
    
    GParted uses ntfsinfo to read the NTFS file system usage.  However when
    ntfsinfo fails with a non-zero exit status GParted reports stdout twice,
    rather than stdout and stderr.  Correct this.
    
    Closes #57 - NTFS Resize results in Partition Information Warning on
                 Refresh

2019-05-26  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2019-05-26  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2019-05-25  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2019-05-22  Jiri Grönroos <jiri.gronroos@iki.fi>

    Update Finnish translation

2019-05-22  Claude Paroz <claude@2xlibre.net>

    Update French translation

2019-05-22  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2019-05-22  Sveinn í Felli <sv1@fellsnet.is>

    Update Icelandic translation

2019-05-03  Luca Bacci <luca.bacci982@gmail.com>

    Set the xalign property for Gtk::Labels (!40)
    
    With the same case as from the previous commit, the very long "Mounted
    on ..." text is now wrapped, but the text may not be left justified.
    Slowly adjust the dialog width and see how the text wrapping is updated
    to fit the size adjustment but the text is centred rather than left
    justified.
    
    This is because setting the halign property to Gtk::ALIGN_START does not
    guarantee left alignment of text for wrapped or ellipsized Gtk::Labels.
    
    Use the xalign property instead.
    
    To set the xalign property there is a method in the GtkMisc (Gtk::Misc)
    base class:
    
      gtk_misc_set_alignment (Gtk::Misc::set_alignment)
    
    However, GtkMisc (Gtk::Misc) was deprecated in Gtk 3.14 (Gtkmm 3.14)
    and in Gtk 3.16 (gtkmm 3.16) set_alignment() was replaced with the
    introduction of two new methods:
    
      gtk_label_set_xalign (Gtk::Label::set_xalign)
      gtk_label_set_yalign (Gtk::Label::set_yalign)
    
    Add a check for Gtkmm method Gtk::Label::set_xalign() in configure.ac
    and use it when available.
    
    References:
    
    [1] Gtk3 Reference Documentation - gtk_misc_set_alignment()
        https://developer.gnome.org/gtk3/stable/GtkMisc.html#gtk-misc-set-alignment
        "gtk_misc_set_alignment has been deprecated since version 3.14 and
        should not be used in newly-written code. Use GtkWidget's alignment
        ("halign" and "valign") and margin properties or GtkLabel's
        "xalign" and "yalign" properties."
    
    [2] Gtkmm 3.16 Gtk::Misc Class Reference, set_alignment() method
        https://developer.gnome.org/gtkmm/3.16/classGtk_1_1Misc.html#a52b2675874cf46a3097938756b9fe9e8
    
    [3] GNOME BugZilla - EmptyBoxes: instructions_label's alignment is off
        https://bugzilla.gnome.org/show_bug.cgi?id=735841
    
    [4] Gtk commit from 2014-09-16:
        GtkLabel: add x/yalign properties
        https://gitlab.gnome.org/GNOME/gtk/commit/d39424fc
    
    [5] Gtk3 Reference Documentation - gtk_label_set_xalign()
        https://developer.gnome.org/gtk3/stable/GtkLabel.html#gtk-label-set-xalign
    
    [6] Gtkmm 3.16 Gtk::Label Class Reference, set_xalign() method
        https://developer.gnome.org/gtkmm/3.16/classGtk_1_1Label.html#acee7d4e87d7cc14080a7b8ded5f84e5e
    
    Closes !40 - Limit wrapping labels

2019-05-01  Luca Bacci <luca.bacci982@gmail.com>

    Set a default max_width_chars for wrapping Gtk::Labels (!40)
    
    Opening the Partition Information dialog for a file system mounted on a
    very long mount point, or on openSUSE which mounts the OS from 10 btrfs
    subvolumes from the same partition, will cause the dialog to be very
    wide as the "Mounted on ..." text is not wrapped.
    
    Back in Gtk2, when width_chars / max_width_chars were not set, wrapping
    labels had a default width beyond which text wrapped onto a new line
    [1].
    
    For Gtk3 this default width was first reworked a bit [2], and then was
    removed for the very early Gtk3 3.0.10 release [3].
    
    It is recommended that applications explicitly set default values,
    otherwise wrapping labels never wrap when requesting their natural
    allocation.
    
    References:
    
    [1] Gtk 2.24.32 source code - gtk/gtklabel.c:2975
        https://gitlab.gnome.org/GNOME/gtk/blob/2.24.32/gtk/gtklabel.c#L2975
            "This long string gives a good enough length for any line to
            have."
    
    [2] Gtk commit from 2010-04-21:
        https://gitlab.gnome.org/GNOME/gtk/commit/680d7762baabb71aa77aeec793e3c70a2013d3b8
        Make sure not to base the minimum size on "max-width-chars", only
        the natural size.
            "This string is just about long enough."
    
    [3] Gtk commit from 2011-04-17:
        https://gitlab.gnome.org/GNOME/gtk/commit/c8ce1106c11361f8b47dd4e9a08db571c7d66d82
        label: Don't try to guess a label's size
    
        People should use window default sizes or label
        width-chars/max-width-chars to find the ideal layout for a label
        instead of relying on magic.
    
    Closes !40 - Limit wrapping labels

2019-05-01  Luca Bacci <luca.bacci982@gmail.com>

    Request natural width in Gtk::ScrolledWindows for Gtk >= 3.22 (!39)
    
    Before Gtk 3.22 GtkScrolledWindow propagated natural size to its
    Children and so on to descendants.  In Gtk 3.22 this was changed to
    always request the minimum size.  This was done because it is believed
    to be a safer default (gives a better behaviour) in case of dynamic
    content inside the scrolled window, that is, content that may change
    allocated size. [1][2][3]
    
    When the scrolled window content is not dynamic the natural size is
    preferable because it gives a better looking layout and without any
    downside.
    
    In the case of GParted content which is not dynamic, so request the
    scrolled windows to allocate children at natural sizes for Gtk >= 3.22.
    
    The benefits of natural size allocation are evident in presence of
    wrapping labels (for example inside the "Partition Info" dialog), that
    with the minimum size request likely end up taking a very small width.
    
    References:
    
    [1] Gtk commit from 2016-08-31:
        GtkScrolledWindow: Make propagation of natural child sizes optional
        https://gitlab.gnome.org/GNOME/gtk/commit/0984d1622d022bf67207f985f7842b6299818e20
        "Making propagation of child natural sizes mandatory (or default,
        even) was evidently a mistake as this causes dynamic content in a
        scrolled window to resize it's parent when the scrolled window is
        competing for space with an adjacent widget."
    
    [2] Gtk 3.22 Reference Documentation -
        gtk_scrolled_window_set_propagate_natural_width
        https://developer.gnome.org/gtk3/3.22/GtkScrolledWindow.html#gtk-scrolled-window-set-propagate-natural-width
    
    [3] Gtkmm 3.24 Gtk::ScrolledWindow Class Reference,
        set_propagate_natural_width() method
        https://developer.gnome.org/gtkmm/3.24/classGtk_1_1ScrolledWindow.html#a2d4cb945688ecb8739efd70b18742779
    
    [4] Gtkmm 3.21.6 NEWS
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.21.6/NEWS
        "ScrolledWindow: Added get/set_propagate_natural_height/width() and
        the properties."
    
    Closes !39 - Always request natural size inside Gtk::ScrolledWindow

2019-05-10  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2019-05-01  Yuras Shumovich <shumovichy@gmail.com>

    Update Belarusian translation

2019-04-30  Seong-ho Cho <shcho@gnome.org>

    Update Korean translation

2018-05-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace deprecated get_vbox() with get_content_area() (!25)
    
    get_vbox() was deprecated in gtkmm 3.1.6 [1][2].  Switch to the
    get_content_area() replacement.  Note that GParted already requires
    gtkmm >= 3.4 as set in configure.ac.
    
    [1] Gtkmm 3.1.6 NEWS
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.1.6/NEWS
        "Dialog: Deprecate get_vbox(), replacing with get_content_area(),
        to match the C function name."
    
    [2] Gtkmm commit from 2011-06-13:
        Dialog: Deprecate get_vbox(), replacing with get_content_area().
        https://git.gnome.org/browse/gtkmm/commit/?id=5ccc289fa8e9b046c07f5ea234f5ced8c6356fc1
    
    Closes !25 - Modern Gtk3 - part 1

2019-03-13  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Grid for Dialog_Partition_Info (!25)
    
    Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
    
    This commit makes the change for Dialog_Partition_Info.
    
    Closes !25 - Modern Gtk3 - part 1

2019-03-07  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Grid for Win_GParted pt2 (!25)
    
    Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
    
    This commit makes the change for Win_GParted / pt2.
    
    Closes !25 - Modern Gtk3 - part 1

2019-03-06  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Grid for Win_GParted pt1 (!25)
    
    Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
    
    This commit makes the change for Win_GParted / pt1.
    
    Closes !25 - Modern Gtk3 - part 1

2019-03-06  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Grid for Dialog_Base_Partition (!25)
    
    Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
    
    This commit makes the change for Dialog_Base_Partition.
    
    Closes !25 - Modern Gtk3 - part 1

2019-03-06  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Grid for Dialog_Partition_New (!25)
    
    Gtk::Table was deprecated in Gtk 3.4.0 [1].  Replace with Gtk::Grid.
    Note that the meaning of the attachment parameters changed between
    Gtk::Table::attach() [2] from left, right, top, bottom and
    Gtk::Grid::attach() [3] to left, top, width, height.
    
    This commit makes the change for Dialog_Base_Partition.
    
    [1] Gtkmm 3.4 NEWS file (actually first included in gtkmm 3.3.2
        unstable)
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.4.0/NEWS#L162
            * Deprecate Gtk::Table in favour of Gtk::Grid.
    
    [2] Gtkmm 3.4 Gtk::Table Class Reference, attach() method
        https://developer.gnome.org/gtkmm/3.4/classGtk_1_1Table.html#a28b6926e68337a51ba29f2b4dd69f087
            Deprecated: 3.4: Use Gtk::Grid::attach() with Gtk:Grid.  Note
            that the attach argument differ between those two function.
    
    [3] Gtkmm 3.4 Gtk::Grid Class Reference, attach() method
        https://developer.gnome.org/gtkmm/3.4/classGtk_1_1Grid.html#a9c425e95660daff60a77fc0cafc18115
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Separator (!25)
    
    Gtk::HSeparator was deprecated in Gtkmm 3.2.  Replace with plain
    Gtk::Separator.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Paned (!25)
    
    Gtk::HPaned and Gtk::VPaned were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Paned.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_Progress (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_Progress.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_Rescue_Data (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_Rescue_Data.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for DialogPasswordEntry (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for DialogPasswordEntry.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_Partition_Name (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_Partition_Name.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_FileSystem_Label (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_FileSystem_Label.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for DialogFeatures (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for DialogFeatures.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_DiskLabel (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_DiskLabel.cc.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_Partition_Info (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_Partition_Info.{h,cc}.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Dialog_Base_Partition (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Dialog_Base_Partition.{h,cc}.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for HBoxOperations (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
    plain Gtk::Box.
    
    This commit makes the change for HBoxOperations.{h,cc}.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Box for Win_GParted (!25)
    
    Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2 [1].  Replace with
    plain Gtk::Box.
    
    This commit makes the change for Win_GParted.{h,cc}.
    
    [1] Gtkmm 3.2.0 NEWS file (actually first included in gtkmm 3.1.6
        unstable)
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.2.0/NEWS#L91
            Gtk:
            * All H* or V* specialized classes have been deprecated, to
              match the deprecations in the GTK+ C API.  You should now
              set the orientation instead.
              This includes HBox, VBox, HButtonBox, VButtonBox, HPaned,
              VPaned, HScale, VScale, HSeparator, VSeparator, HScrollbar and
              VScrollbar.
    
    Closes !25 - Modern Gtk3 - part 1

2019-02-20  Luca Bacci <luca.bacci982@gmail.com>

    Use Gdk::RGBA (!25)
    
    The Gdk::RGBA data type was introduced to replace Gdk::Color in
    Gtkmm 3.0 [1], with Gdk::Color being deprecated in Gtkmm 3.10 [2].
    
    With this commit we make the change to Gdk::RGBA data type which is the
    modern replacement to Gdk::Color.  Gdk::RGBA can be used almost as a
    drop in replacement because it keeps most of the Gdk::Color interface.
    
    Also, this commit removes the C Gtk call introduced during the
    port-to-gtk3 patchset by commit:
        53793527668a344fe54ceb61a1afdc39c24c5c45
        repare-for-gtk3: Prepare for removal of Gtk::Widget::modify_fg() (#7)
    
    [1] Gtkmm 3.0.1 NEWS file
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.0.1/NEWS#L48
            * RGBA replaces Color, though Color still exists because it is
              used by TextView.  We hope to deprecated Color completely in
              gtkmm 3.2.
    
    [2] Gtkmm 3.10.0 NEWS file
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.10.0/NEWS#L127
            Gdk:
            * Deprecate Color.
    
    Closes !25 - Modern Gtk3 - part 1

2019-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update includes in DialogFeatures.h and .cc
    
    Mostly add, but also remove, #includes so both DialogFeatures.h and .cc
    include exactly the header files each needs to get the definitions they
    use.
    
    Header file #include guards are there to specifically enable this.

2019-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename method to DialogFeatures::load_one_filesystem()
    
    To better reflect that it is loading the supported actions for one file
    system into the treeview, just like it's parent load_filesystems() is
    initiating the loading for all the file systems.

2019-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix available Partition menu options not being updated on rescan (!38)
    
    Select a partition and look at the available actions in the Partition
    menu.  Then add or remove some commands which that particular file
    system uses and rescan to detect those changes.  Open the Partition menu
    again.  It doesn't reflect the changes of supported actions seen in the
    File System Support dialog.  Select a different partition and then
    select the original partition again.  Now the available actions in the
    Partition menu reflect the changes of supported actions.
    
    Have been testing by adding and removing /sbin/e2label to add and
    remove EXT2/3/4 file system labelling support just because that feature
    has existed for a very long time and EXT2/3/4 are displayed near the top
    of the File System Support dialog.  Tested this minor issue existed as
    far back as GParted 0.3.7.
    
    Fix by simply also refreshing the valid operations to update the
    Partition menu after updating the found file system specific commands.
    
    Closes !38 - Fixes for minor issues with File System Support rescanning

2019-04-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix File System Support dialog not showing changes after rescan (!38)
    
    Open the File System Support dialog, either add or remove some file
    system specific commands used by GParted and press the
    [Rescan For Supported Actions] button.  The supported actions don't
    change.  However after just closing and reopening the dialog, the
    supported actions do reflect the added or removed file system specific
    commands.
    
    Bisected to this commit:
        4d6d46466478f656ce2ebb3c6b5a88cf0657667f
        Display "other" in the File System Support dialog (!13)
    
    The problem is that commit made a subset copy of the
    GParted_Core::FILESYSTEMS vector, obtained from get_filesystems(), so
    when the rescan ran and the FILESYSTEMS vector was updated with new
    supported actions, the dialog still displayed the original subset copy,
    so didn't reflect the changed supported actions.
    
    Fix by passing a reference to the GParted_Core::FILESYSTEMS vector,
    obtained from get_filesystems(), and perform the necessary filtering
    inside the dialog, like before the above faulty commit.  Additionally
    finding and adding "other" file system to the end of the list.
    
    Closes !38 - Fixes for minor issues with File System Support rescanning

2019-04-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop checking for 'ntfslabel --new-serial' support
    
    The oldest supported distributions have these versions of ntfs-3g /
    ntfsprogs.
    
      Distro             EOL        ntfs-3g / ntfsprogs
    - Debian 8           2020-Jun   2014.2.16AR.2
    - RHEL / CentOS 7    2024-Jun   2017.3.23
    - Ubuntu 14.04 LTS   2019-Apr   2013.1.13AR.1
    
    The oldest version of ntfs-3g / ntfsprogs on Ubuntu 14.04 LTS includes
    support for the --new-serial option.
    
        $ ntfslabel -V
    
        ntfslabel v2013.1.13AR.1 (libntfs-3g) - Display, or set, the label for an NTFS Volume.
    
        $ ntfslabel --help | grep -- --new-serial
                --new-serial   Set a new serial number
    
    Therefore it is no longer necessary to check for this option as it is
    always available.  The worst case scenario is that some how an old
    version of ntfslabel is used which doesn't support this option.  In such
    a case GParted goes from not supporting changing the UUID to claiming
    support, but presumably it would fail with an error reporting unknown
    option when applied.  Arguably better from an end user support point of
    view.

2019-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Consolidate common if have ntfsresize command conditions

2019-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to faster ntfsinfo to read NTFS usage (#47)
    
    A user reported GParted was slow to refresh and timing ntfsresize to
    query his file systems found that it was taking 4.7 seconds and 9.2
    seconds for sizes 31.7 GiB and 49 GiB NTFS file systems respectively.
    Almost 14 seconds just to read the usage.
    
    Created a 4 GiB NTFS and filled it with as many 4 KiB files as possible,
    just over 800,000 files.
    
        # df -k /mnt/2
        Filesystem     1K-blocks    Used Available Use% Mounted on
        /dev/sdb2        4194300 4193860       440 100% /mnt/2
        # df -i /mnt/2
        Filesystem     Inodes  IUsed IFree IUse% Mounted on
        /dev/sdb2      819640 808591 11049   99% /mnt/2
    
    Testing perform of ntfsresize:
    
        # time ntfsresize --info --force --no-progress-bar /dev/sdb2 | \
        > egrep 'Current volume size|resize at|Cluster size'
        Cluster size       : 4096 bytes
        Current volume size: 4294963712 bytes (4295 MB)
        You might resize at 4294516736 bytes (freeing 450560 bytes).
    
        real    0m5.231s
        user    0m2.072s
        sys     0m3.014s
    
    Computation of figures:
        Clusters per volume = 4294963712 / 4096 = 1048575.125
        Free clusters = (4294963712 - 4294516736) / 4096 = 109.125
    
    Testing performance of ntfscluster, as used before this commit [1] from
    GParted 0.3 in 2006:
    
        # time ntfscluster --force /dev/sdb2 | \
        > egrep 'bytes per cluster|bytes per volume|clusters per volume|clusters of free space'
        ...
        bytes per cluster       : 4096
        bytes per volume        : 4294963200
        clusters per volume     : 131071
        clusters of free space  : 110
    
        real    0m4.243s
        user    0m1.629s
        sys     0m2.587s
    
    Note that the clusters per volume figure reported by ntfscluster is
    wrong.  4294963200 / 4096 = 1048575, not 131071.
    
    Testing performance using ntfsinfo:
    
        # time ntfsinfo --mft /dev/sdb2 | \
        egrep 'Cluster Size|Volume Size in Clusters|Free Clusters'
                Cluster Size: 4096
                Volume Size in Clusters: 1048575
                Free Clusters: 110 (0.0%)
    
        real    0m0.022s
        user    0m0.012s
        sys     0m0.018s
    
    Repeating the above tests while also using 'btrace /dev/sdb2' and Ctrl-C
    around each test via a separate terminal, reports these numbers of I/Os
    being performed:
      Command      Read requests   Read bytes
    - ntfsresize           2,695     1116 MiB
    - ntfscluster          2,685     1116 MiB
    - ntfsinfo                13     2208 KiB
    No wonder that ntfsresize and ntfscluster take a long time, they read
    just over 1 GiB of data from the 4 GiB file system, where as ntfsinfo
    only reads just over 2 MiB.
    
    Switch to using ntfsinfo to report file system usage.
    
    [1] 9d956594d6acf0d983ae9105df2f3772194a5404
        replaced ntfscluster with ntfsresize (see #350789)
    
    Closes #47 - GParted is slow refreshing NTFS file systems

2019-04-17  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2019-04-17  Daniel Mustieles <daniel.mustieles@gmail.com>

    Update Spanish translation

2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prefer enum to string comparison in set_partition_type()

2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop trying unneeded alternative libparted linux-swap names
    
    With that same commit in parted 1.9 [1], libparted only recognised these
    linux-swap names via deprecated aliases:
        linux-swap(old)
        linux-swap(new)
    but does accept this name as a current alias:
        linux-swap
    for:
        linux-swap(v1)
    
    Demonstration:
        # parted -v
        parted (GNU parted) 2.1
        ...
    
        # parted /dev/sdc mkfs yes 1 "linux-swap(new)" unit s print
        ...
        [0] filesys.c:148 (ped_file_system_type_get(): File system alias linux-swap(new) is deprecated
        ...
        Number  Start  End       Size      Type     File system     Flags
         1      2048s  2099199s  2097152s  primary  linux-swap(v1)
    
        # parted /dev/sdc mkfs yes 1 "linux-swap" unit s print
        ...
        Number  Start  End       Size      Type     File system     Flags
         1      2048s  2099199s  2097152s  primary  linux-swap(v1)
    
    Again as GParted now requires libparted 2.2 or later:
    1) Stop using alternative "linux-swap(new)" name as that is deprecated
       by libparted.
    2) Also stop using alternative "linux-swap(v1)" name as that code is
       never used because libparted recognised the GParted "linux-swap"
       name as a current alias.
    
    [1] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=cfafa4394998a11f871a0f8d172b13314f9062c2
        Rationalise linux-swap fs names, and add a "linux-swap" alias

2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop recognising retired libparted linux-swap names
    
    With this commit in parted 1.8.3 [1], libparted changed from reporting
    the name of Linux swap as:
        linux-swap
    to reporting either:
        linux-swap(old)
        linux-swap(new)
    Later with this commit in parted 1.9 [2], libparted stopped reporting
    those names and reported these instead:
        linux-swap(v0)
        linux-swap(v1)
    
    Demonstration:
        # mkswap /dev/sdc1
        Setting up swapspace version 1, size = 1048572 KiB
        no label, UUID=a2010834-003d-4bf2-9e94-58383fe20a26
        # blkid /dev/sdc1
        /dev/sdc1: UUID="a2010834-003d-4bf2-9e94-58383fe20a26" TYPE="swap"
        # parted -v
        parted (GNU parted) 2.1
        ...
        # parted /dev/sdc unit s print
        ...
        Number  Start  End       Size      Type     File system     Flags
         1      2048s  2099199s  2097152s  primary  linux-swap(v1)
    
    As GParted now requires libparted 2.2 or later [3], remove recognition
    for those no longer libparted reported linux-swap names.  Note that the
    "swap" name is reported by blkid.
    
    [1] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=98a53fd115ca012edf226525b8d4be628454f99e
        Enable support for swsusp partitions, and the ability to
        differentiate between old and new versions of linux-swap partitions.
        Changed the swap_init signature and removed extra ped_geometry_read
        from _swap*_open.
    
    [2] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=cfafa4394998a11f871a0f8d172b13314f9062c2
        Rationalise linux-swap fs names, and add a "linux-swap" alias
    
    [3] 8df975c7d1b5d69897f286bfc5574c51cf58c9d5
        Increase minimum required libparted to 2.2 (!22)

2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set partition type when formatting to cleared (!36)
    
    Formatting a partition to cleared over the top of LVM2 PV leaves the
    "lvm" flag set on the partition; where as formatting with an actual file
    system over the top of an LVM2 PV clears the "lvm" flag.  This is true
    for both MSDOS and GPT partitioned drives.
    
    Fix by setting the partition type when formatting to cleared too.
    
    Closes !36 - Set partition type when clearing partition contents

2019-04-15  Stas Solovey <whats_up@tut.by>

    Update Russian translation

2019-04-14  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2019-04-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary #include from GParted_Core.cc

2019-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Dialog_Progress member variable to m_curr_op
    
    Having a member variable named 't' which is used to share state in a
    Dialog_Progress object between on_signal_show() and on_cancel() methods
    is horrible.  Rename to something more meaningful.
    
    Also initialise m_curr_op in the constructor's initialisation list,
    rather than later when first used in on_signal_show().  Not strictly
    required, but avoids this POD (Plain Old Data) member variable being
    undefined in the Dialog_Progress object between construction and when
    on_signal_show() previously assigned to it for the first time and
    started using it.
    
    * C++ FAQ / Should my constructors use "initialization lists" or
      "assignment"?
      https://isocpp.org/wiki/faq/ctors#init-lists

2019-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename for loop counter variables to normative 'i' in Dialog_Progress
    
    Several for loops created counter variable t, hiding member variable of
    the same name.  Rename those loop counter variables to the normative
    name 'i'.
    
    * Why do most of us use 'i' as a loop counter variable?
      https://softwareengineering.stackexchange.com/questions/86904/why-do-most-of-us-use-i-as-a-loop-counter-variable

2019-04-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use CSS to turn off table borders once in saved details HTML

2019-04-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename method to Dialog_Progress::write_operation_details()
    
    And update comment about replacing '\n' to reflect what the code
    actually does.

2019-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Additionally write partition information to saved details (#639176)
    
    Bug 639176 - Save partition layout to gparted_details.htm

2019-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Write starting device overview information to saved details (#639176)
    
    Writes the starting device overview information of all known devices to
    the top of the saved details HTML.  This is so that hopefully we don't
    need to additionally ask users for their disk layouts via 'fdisk -l',
    'parted print' and 'lsblk' when the saved details file is provided.
    
    Also moves the equals separators "==================" from below to
    above each operation so the each section is separated.
    
    Bug 639176 - Save partition layout to gparted_details.htm

2019-03-27  Luca Bacci <luca.bacci982@gmail.com>

    Ensure icon sizes (#39)
    
    Some icon themes only provide large icons for stock items.  This can
    cause problems like overly large icons appearing in the GParted UI.
    Found on Kubuntu 16.04 LTS with default breeze icon theme.
    
    Be compatible with these icon themes by forcing scaling of stock icons
    to the requested size.
    
    Icons are used either by Gtk::Image widgets, or Gtk::CellRendererPixbuf
    objects for comboboxes/treeviews.  For Gtk::Image widgets we add
    Utils::mk_image() that constructs Gtk::Image widgets and then sets the
    pixel-size property.  For Gtk::CellRendererPixbuf we add
    Utils::mk_pixbuf() that first loads a Gdk::Pixbuf and then scales if
    needed.
    
    Closes #39 - After GTK3 port icons are too big on KDE

2019-03-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update distro specific package installation instructions
    
    - Back in Fedora 22 the distribution switched from using yum to dnf for
      package installation, while CentOS / RHEL continues to use yum.
      Separate out package instructions.
    
    - Update package dependencies for what is required on current versions
      of the documented distributions.

2019-03-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also write "Root privileges are required ..." message to stderr (!34)
    
    To further help in diagnosing root authorisation issues by reporting the
    error message to the terminal too.  Also set a failure exit status when
    terminating with this error.
    
    Example:
        $ ./gpartedbin
        GParted 0.33.0-git
        configuration --enable-online-resize
        libparted 3.2
        Root privileges are required for running GParted
        $ echo $?
        1
    
    Closes !34 - Display more version and configuration information

2019-03-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Print new info before "Root privileges are required ..." dialog (!34)
    
    So that the new version and configuration information is displayed even
    if the gpartedbin executable is run as a non-root user.  To help with
    diagnosing root authorisation issues with the gparted shell wrapper
    script.
    
    Closes !34 - Display more version and configuration information

2019-03-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now unused Dialog_Progress::signal_get_libparted_version (!34)
    
    ... and related GParted_Core::get_libparted_version() method.
    
    Closes !34 - Display more version and configuration information

2019-03-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report the same information into saved operation details (!34)
    
    For consistency save the 3 same lines of information into the saved
    operation details.  None of the new 3 lines are subject to translation.
    As this information is really for our benefit when supporting users
    leaving them as English is OK.  Also "GParted" and "Libparted", as
    previously used, are proper nouns so they were never changed as part of
    any language translation.  See with:
        egrep -r '"(GParted|Libparted)"' po/
    
    Closes !34 - Display more version and configuration information

2019-03-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display more version and configuration info to stdout when starting (!34)
    
    So that we might get more information from users when helping them.
    Starting GParted from the command line now looks like this:
        # ./gpartedbin
        GParted 0.33.0-git
        configuration --enable-online-resize
        libparted 3.2
    
    Closes !34 - Display more version and configuration information

2019-03-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename local variable to meaningful benchmark_copysize

2019-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop trying to access device '/dev/mapper/No RAID disks' (#786031)
    
    Running GParted on AltLinux with dmraid installed but with no configured
    RAID arrays produces this error:
        # gparted
        ...
        Could not stat device /dev/mapper/No RAID disks - No such file or directory.
    
    Most distributions use dmraid 1.0.0.rc16 which reports no raid disks
    like this:
        # dmraid -sa -c
        no raid disks
        # echo $?
        1
    
    However AltLinux had the slightly older version, dmraid 1.0.0.rc14,
    which reported no raid disks like this:
        # dmraid -sa -c
        No RAID disks
        # echo $?
        0
    
    So because dmraid 1.0.0.rc14 reported success, exit status 0, and the
    "No RAID disks" message was not in lower case, that text was considered
    a disk device in a DMRaid array.  Fix by checking for "no raid disks" in
    any case.
    
    Bug 786031 - Could not stat device /dev/mapper/No RAID disks - No such
                 file or directory

2019-03-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass constant parameter by reference to load_operations() (#788814)
    
    It is common C++ practice to pass a constant object by reference to
    avoid constructing a duplicate object for pass by value [1].
    
    [1] How to pass objects to functions in C++?
        https://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/2139254#2139254
    
    Bug 788814 - gparted-0.30.0/include/HBoxOperations.h:37]: performance
                 problem

2019-03-26  Luca Bacci <luca.bacci982@gmail.com>

    Always show menu images (!32)
    
    There is a GtkSetting [1] that controls whether images in menus are
    shown or not.  On some distributions / desktops it is enabled by default
    and on others it is disabled by default.  To force show images in menus
    set the 'always-show-image' property to true in Gtk::ImageMenuItems [2].
    
    References:
    
    [1] Gtk3 Reference Documentation - Settings/gtk-menu-images
        https://developer.gnome.org/gtk3/stable/GtkSettings.html#GtkSettings--gtk-menu-images
    
    [2] Gtk3 Reference Documentation - GtkImageMenuItem
        https://developer.gnome.org/gtk3/stable/GtkImageMenuItem.html#gtk-image-menu-item-set-always-show-image
    
    Closes !32 - Always show menu images

2019-03-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Drop compose subdir (#46)
    
    It's no longer used so drop it.
    
    Closes #46 - Drop compose subdir

2019-03-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace String::ucompose() with Glibmm equivalent (#46)
    
    Glibmm has implemented a ustring::compose() set of methods [1] since
    Glibmm 2.16, circa 2008.  So replace String::ucompose().  Note that
    GParted already requires glibmm >= 2.32 as set in configure.ac.
    
    This commit just replaces all the method calls.  Edit created by:
        sed -i 's|String::ucompose *|Glib::ustring::compose|' src/*.cc
    
    [1] Glibmm Reference Manual, Glib::ustring Class, compose() method
        https://developer.gnome.org/glibmm/2.32/classGlib_1_1ustring.html#a64ff7ac3d9e9899c2910f1d831f8d500
    
    Closes #46 - Drop compose subdir

2019-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise contribution by Antoine Viallon

2019-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Raise the maximum F2FS label size to 127 characters (!29)
    
    Fix to make mkfs.f2fs properly handle labels longer than 16 characters
    was included in f2fs-tools 1.2.0 [1].  The oldest supported
    distributions now include this release:
      Distro             EOL        f2fs-tools
    - Debian 8           2020-Jun   1.4.0
    - RHEL / CentOS 7    2024-Jun   1.4.1
    - SLES 12            2027-Oct   Unknown
    - Ubuntu 14.04 LTS   2019-Apr   1.2.0
    
    Note that on Ubuntu 14.04 LTS blkid from util-linux 2.20.1 is too old to
    recognise F2FS file systems, as 2.23 is required for F2FS support [2].
    
    mkfs.f2fs claims the maximum label length is less than 512 characters,
    but actually accepts 512 characters.
    
        # label=`head -c 1024 < /dev/zero | tr '\0' 'A'`
        # mkfs.f2fs -l `echo -n "$label" | cut -c1-513` /dev/sdb10
    
                F2FS-tools: mkfs.f2fs Ver: 1.4.0 (2014-09-18)
    
        Error: Volume Label should be less than      512 characters
    
        Usage: mkfs.f2fs [options] device [sectors]
        [options]:
          -a heap-based allocation [default:1]
          -d debug level [default:0]
          -e [extension list] e.g. "mp3,gif,mov"
          -l label
          -o overprovision ratio [default:5]
          -s # of segments per section [default:1]
          -z # of sections per zone [default:1]
          -t 0: nodiscard, 1: discard [default:1]
        sectors: number of sectors. [default: determined by device size]
        # echo $?
        1
    
        # mkfs.f2fs -l `echo -n "$label" | cut -c1-512` /dev/sdb10
    
                F2FS-tools: mkfs.f2fs Ver: 1.4.0 (2014-09-18)
    
        Info: Label = AAAAAAAAAAAA...[trimmed from 512 "A"s]...AAAAAAAAAAAA
        Info: sector size = 512
        Info: total sectors = 1048576 (in 512bytes)
        Info: zone aligned segment0 blkaddr: 256
        Info: Discarding device
        Info: This device doesn't support TRIM
        Info: format successful
        # echo $?
        0
    
        # blkid -V
        blkid from util-linux 2.25.2  (libblkid 2.25.0, 24-Oct-2014)
        # blkid /dev/sdb
        /dev/sdb10: LABEL="AAAAAAAAAAAA...[only 127 "A"s]...AAAAAAAAAAAA"
        UUID="f47f3fdc-dd91-4616-bb6d-0d643a884265" TYPE="f2fs"
        PARTUUID="3bb4bef8-9494-4e82-8dda-5d8edd9c60d9"
    
    As blkid only reports the first 127 characters and is the only command
    used for reading the label of an F2FS file system, use this as the new
    increased limit.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=9799d6364dc93e1fd259d812d4a50ed984a6456b
        mkfs: handle labels longer than 16 characters
    
    [2] https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.23/v2.23-ReleaseNotes
        "add Flash-Friendly File System (f2fs) support  [Alejandro Martinez
        Ruiz]"
    
    Closes !29 - Enhance F2FS support

2019-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Drop fsck.f2fs -y option not available before f2fs-tools 1.10.0 (!29)
    
    On CentOS 7 with f2fs-tools 1.4.1, checking an F2FS file system fails
    like this:
        # fsck.f2fs -f -y -a /dev/sdb3
        Info: Force to fix corruption
        fsck.f2fs: invalid option -- 'y'
                Error: Unknown option ?
    
        Usage: fsck.f2fs [options] device
        [options]:
          -a check/fix potential corruption, reported by f2fs
          -d debug level default:0]
          -f check/fix entire partition
          -t show directory tree [-d -1]
        # echo $?
        1
    
    Turns out that the '-y' option was not available until f2fs-tools 1.10.0
    and is identical to the existing '-f' option anyway [1], which GParted
    already uses.  Just remove the '-y' option passed to fsck.f2fs.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=55ee9e7202f84168f868d863da8ed1c4995a0e6d
        fsck.f2fs: add -y for generic fsck
    
    Closes !29 - Enhance F2FS support

2019-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Handle missing FS size information before f2fs-tools 1.5.0 (!29)
    
    Before this commit [1] first included in f2fs-tools 1.5.0, dump.f2fs
    didn't report the total space used by the file system.  This causes F2FS
    file system usage not be reported on older distributions, including
    RHEL/CentOS 7 and Debian 8.
    
    On CentOS 7:
        # rpm -q f2fs-tools
        f2fs-tools-1.4.1-2.el7.nux.x86_64
        # dump.f2fs -d 1 /dev/sdb3 | egrep 'sector size =|total.*sectors ='
        Info: sector size = 512
        Info: total sectors = 2097152 (in 512 bytes)
    
    On Fedora 28:
        # rpm -q f2fs-tools
        f2f2-tools-1.10.0-1.fc28.x86_64
        # dump.f2fs -d 1 /dev/sdb2 | egrep -a 'sector size =|total.*sectors ='
        Info: sector size = 512
        Info: total sectors = 3145728 (1536 MB)
        Info: total FS sectors = 2621440 (1280 MB)
    
    "total sectors" reports the size of the partition.
    "total FS sectors" reports the size of the file system.
    
    Cope with the file system size being missing.  Pass -1 as the file
    system size to partition.set_sector_usage() in this case.  Note that
    this means GParted won't be able to detect and report unallocated space
    within the partition when using f2fs-tools < 1.5.0.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=fea6162a6db9af527648262d9fbb0335a0cc5460
        fsck.f2fs: show total sectors consumed by filesystem
    
    Closes !29 - Enhance F2FS support

2019-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make F2FS usage parsing handle NULs in dump.f2fs output (!29)
    
    On Fedora 28 with f2fs-tools 1.10.0, dump.f2fs is producing NUL
    characters in it's output and this completely breaks the parsing code in
    f2fs::set_used_sectors().  Glib::Regex, as used by
    Utils::regexp_label(), just doesn't match any text after the first NUL
    character from the output.
    
        # dump.f2fs -d 1 /dev/sdb1
        Info: Debug level = 1
        Info: [/dev/sdb1] Disk Model: VBOX HARDDISK   1.0 ^@^@^@^@^@^@^@^...
        Info: Segments per section = 1
        Info: Sections per zone = 1
        Info: sector size = 512
        Info: total sectors = 2097152 (1024 MB)
        ...
    
    Grep thinks the output is binary too:
    
        # dump.f2fs -d 1 /dev/sdb1 | \
        > egrep 'valid_block_count|user_block_count|log_blocksize|sector size =|total FS sectors ='
        Binary file (standard input) matches
    
        # dump.f2fs -d 1 /dev/sdb1 | \
        > egrep --text 'valid_block_count|user_block_count|log_blocksize|sector size =|total FS sectors ='
        Info: sector size = 512
        log_blocksize                           [0x       c : 12]
        Info: total FS sectors = 2097152 (1024 MB)
        user_block_count                        [0x   36400 : 222208]
        valid_block_count                       [0x       2 : 2]
    
    Re-write set_used_sectors() using string find() and sscanf() to be
    similar to how a number of the other set_used_sectors() are written for
    other file systems.
    
    Closes !29 - Enhance F2FS support

2019-03-15  Antoine Viallon <antoine.viallon@gmail.com>

    Enhance F2FS support (!29)
    
    - Adds reading of file system usage
    - Adds resize (grow) support
    - Adds verify support
    
    Closes !29 - Enhance F2FS support

2019-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Go back to symbolic label widget alignment constants
    
    Now that GParted requires Gtk3 there is no need to use floating point
    numbers for compatibility with Gtk <= 2.22.  Replace with symbolic
    alignment constants.
    
    Relevant commit history:
    
    *   6efa6234012b5fa112af4db08e0b89238d53981a
        Add optional yalign argument to Utils::mk_label() method
    
    *   be2689ad25c104e3cb97e7d5d1f7627dbb137b19
        Stop using deprecated widget alignment enumerators (#652044)

2019-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass message parameters by reference to 2 Partition methods (#788813)
    
    Note that this almost certainly has no performance benefit what so ever
    because the methods are implicitly defined as inline [1][2] and the
    compiler will have simply inlined the method bodies thus avoiding having
    to construct copies of the passed parameters.
    
    Do this anyway as constant objects are typically passed by reference
    [3].  Also C++'s std::vector::push_back() [4] takes a const reference
    parameter so update the kind of equivalent push_back_message() to take
    a const reference parameter too.
    
    [1] C++ reference / inline specifier
        https://en.cppreference.com/w/cpp/language/inline
    
            A function defined entirely inside a class/struct/union
            definition, whether it's a member function or a non-member
            friend function, is implicitly an inline function.
    
    [2] When should I write the keyword 'inline' for a function/method?
        https://stackoverflow.com/questions/1759300/when-should-i-write-the-keyword-inline-for-a-function-method/1759575#1759575
    
    [3] How to pass objects to functions in C++?
        https://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/2139254#2139254
    
    [4] C++ reference / std::vector::push
        https://en.cppreference.com/w/cpp/container/vector/push_back
    
            void push_back(const T& value);
    
    Bug 788813 - gparted-0.30.0/include/Partition.h:137]: performance
                 problem

2019-03-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop checking for 'btrfs filesystem label' support (!26)
    
    btrfs-progs 3.12 includes 'btrfs filesystem label /dev/PTN NEWLABEL'
    functionality so stop checking for this before enabling setting the
    label.
    
        $ btrfs version
        Btrfs v3.12
        $ btrfs filesystem label --help
        usage: btrfs filesystem label [<device>|<mount_point>] [<newlabel>]
    
            Get or change the label of a filesystem
    
            With one argument, get the label of filesystem on <device>.
            If <newlabel> is passed, set the filesystem label on <newlabel>.
    
        $ echo $?
        0
    
    Worst case scenario is that some how an old version of the btrfs command
    is used which doesn't support the labelling functionality.  Then this
    commit would change GParted from disallowing labelling of a btrfs, to
    allowing it, but presumably it would fail with an error from the btrfs
    command reporting so.  Arguably better from a support point of view.
    
    Closes !26 - Remove support for btrfs-progs < 3.12

2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace use of deprecated btrfsck (!26)
    
    In btrfs-progs 3.12, btrfsck is a hard link to the multi-tool btrfs
    executable.  When run as 'btrfsck' it just implements 'btrfs check'
    [1][2][3][4].
    
    In btrfs-progs 3.14.2 the btrfsck man page is re-added as a symlink to
    the btrfs-check man page and reports that btrfsck is deprecated [5].
    
    Therefore replace use of 'btrfsck' with 'btrfs check'.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=fac45410e9a783c187ae83d993d3bf3350d05149
        Btrfs-progs: Rename btrfsck.c -> cmds-check.c
    
    [2] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=5956f752c66d5259bbb17a2dd47ee8c8cc0e5f4f
        Btrfs-progs: add btrfsck functionality to btrfs
    
    [3] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=d5d2046ae3b216af22a8a37c940f2412ba519b6e
        Btrfs-progs: add btrfsck name detection to btrfs
    
    [4] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=e31f6172aa1d6ec5d562f56086819a0f4bc8a914
        btrfs-progs: build btrsfck to keep compatibility
    
    [5] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=fddeecb7d424d5bb1a93a19a5e537057a4a7f597
        btrfs-progs: doc: link btrfsck to btrfs-check
    
    Closes !26 - Remove support for btrfs-progs < 3.12

2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using removed btrfsctl (!26)
    
    That commit [1] also removed btrfsctl from btrfs-progs 3.12 so also stop
    using it as a fallback.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=f243fcd1b2aa55ffadfbcc032c66dedbee56e79e
        Removing btrfsctl, btrfs-vol, btrfs-show
    
    Closes !26 - Remove support for btrfs-progs < 3.12

2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Finish removal of btrfs-show (!26)
    
    Remove use of btrfs-show from everywhere else in the btrfs module.
    
    Closes !26 - Remove support for btrfs-progs < 3.12

2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using removed btrfs-show to read the label (!26)
    
    This commit [1] from btrfs-progs 3.12 removed the previously deprecated
    programs btrfsctl and btrfs-show.  As btrfs-progs 3.12 is now the
    minimum requirement, remove support for those removed programs.
    
    This commit is just removing the use of btrfs-show as a fallback to read
    the label.
    
    Note that 'btrfs-show /dev/PTN' didn't distinguish between a label of
    "none" and no label.  Hence the logic in btrfs::read_label() to do with
    matching the label "none", or matching the label with or without single
    quotes.  Unfortunately as identified in this commit [2]
    'btrfs filesystem show /dev/PTN' is subject to the same issue, but only
    when the file system is mounted and only for btrfs-progs 3.12.  This was
    fixed by this commit [3] from btrfs-progs 3.14.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=f243fcd1b2aa55ffadfbcc032c66dedbee56e79e
        Removing btrfsctl, btrfs-vol, btrfs-show
    
    [2] eca732fb0cefe35db76a7ac96145e2004e8eed08
        Update parsing of btrfs filesystem show for the label (#733601)
    
    [3] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=a156b967ed9bd606afa8dc402451abcf07226c17
        btrfs-progs: make filesystem show by label work
    
    Closes !26 - Remove support for btrfs-progs < 3.12

2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove old workaround for btrfs resizing on Linux < 3.2 (!26)
    
    PATCHSET OVERVIEW
    
    The oldest supported distributions have these versions of the Linux
    kernel and btrfs-progs:
      Distro             EOL        kernel    btrfs-progs
    - RHEL / CentOS 7    2024-Jun   3.10.0    4.9.1
    - Ubuntu 14.04 LTS   2019-Apr   4.4.0     3.12
    - Debian 8           2020-Jun   3.16.0    3.17
    - SLES 12            2027-Oct   3.12.28   3.16
    
    Making the oldest supported packages be kernel 3.10 and btrfs-progs 3.12
    allows the btrfs support code to be simplified by removing backward
    compatibility.
    
    THIS CHANGE
    
    Remove old workaround for ignoring the error when resizing a btrfs to
    the same size on Linux kernel < 3.2.
    
    Also now that only exit status 0 is considered successful from btrfs
    resize, the EXEC_CHECK_STATUS flag to execute_command() can be used,
    rather than having to separately call set_status() afterwards.
    
    Relevant commit history:
    *   11d044dba0c07a5c51843beec6ff38f0c55303d8
        Don't ignore any errors resizing btrfs on Linux >= 3.2 (#669389)
    *   a580abbc30e88cb1895af342d43dcbb98183a9d5
        Use newer btrfs multi-tool control command first
    
    Closes !26 - Remove support for btrfs-progs < 3.12

2019-03-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set title of Resize/Move dialog for an extended partition (#44)
    
    The title has never been set in this case, and defaulted to the name of
    the executable 'gpartedbin'.  Fix this.
    
    Closes #44 - Title not set in Resize/Move dialog for extended partitions

2019-03-03  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2019-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Initialise local POD 'launched' variable in show_help()
    
    'launched' local POD (Plain Old Data) variable was left uninitialised,
    but was set in both the try and catch clauses.  Best practice is to
    initialise when defined, so do that instead.  Cosmetic change.

2019-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Win_GParted method to show_help()
    
    It is not creating a dialog (a pop-up window managed by GParted code
    itself).  It is launching independent yelp program to display the help,
    so remove the "_dialog" from the name to avoid any possible confusion.

2019-02-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore specific error message on failure to launch yelp
    
    Originally, if the yelp command was not installed, attempting to display
    help produced an error dialog with this message:
        Failed to execute child process "yelp" (No such file or directory)
    
    However since this commit during the Gtk 3 port [1] the error message
    became this less useful one:
        Operation not supported
    
    Two attempts are made to display the GParted Manual, first using
    gtk_show_uri() and second by executing the yelp command directly.  Prior
    to the aforementioned commit [1] both methods returned the failure
    reason using the same 'error' variable.  Hence reported the message
    "Failed to execute child process "yelp" ..." from the second attempt.
    However that commit had to re-code the second method as part of the Gtk
    3 port and use a different error returning mechanism, thus the use of
    different variable 'e'.  But the dialog was left reporting the message
    from the original 'error' variable, thus reporting "Operation not
    supported" message from the first attempt using gtk_show_uri().
    
    Fix by again displaying the message from the second failure into the
    error dialog.  Also make it very clear there are two error returning
    variables by naming them 'error1' and 'error2_msg'.
    
    [1] 2953778a4c0e61d8fe49c7a6d707add8a9eb0634
        port-to-gtk3: Use Gdk::AppLaunchContext to launch yelp (#7)

2019-02-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove deprecated PKG_NAME from autogen.sh
    
    Use of PKG_NAME is deprecated in GNOME 3 and produced this warning:
    
        $ ./autogen.sh
        /usr/bin/gnome-autogen.sh
        /usr/bin/yelp-build
        ***Warning*** PKG_NAME is deprecated, you may remove it from autogen.sh
        ...
    
    Now that GParted is a GNOME 3 application with GNOME 3 yelp-tools
    managed documentation this is redundant and can be removed.  Previous
    further analysis:
    
        GNOME Bugzilla, Bug 743318, comment 18
        https://bugzilla.gnome.org/show_bug.cgi?id=743318#c18
        "
        PKG_NAME is still used in GNOME 2.28's gnome-autogen.sh in error
        messages.  (GNOME 3's gnome-autogen.sh queries it from configure.ac
        instead of requiring it to be set).
        "
    
    Also confirmed that it makes no difference by running ./autogen.sh with
    and without PKG_NAME being set.  The produced GParted build trees were
    the same.  Therefore the release and executable can't be affected.

2019-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Drop now unnecessary editing of xmllint command line in CI tests (!24)
    
    GNOME 3's yelp doesn't use scrollkeeper or the OMF catalog, so the
    constructed Makefile doesn't use xmllint to validate the scrollkeeper
    DTD file.  Therefore remove attempted sed edit of that line which no
    longer exists in the Makefile.
    
    Note that help/Makefile.am's @YELP_HELP_RULES@ automake macro expansion
    comes from /usr/share/aclocal/yelp.m4 [1].
    
    Commit which previously needed to add the sed edit:
        cbb25a2511ec9e355b4dbba288689bbc00b7af65
        Stop xmllint scrollkeeper-omf.dtd fetch failure breaking CI tests (#9)
    
    [1] Yelp > Yelp Tools > yelp.m4
        http://yelp.io/tools/yelp.m4.html
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2019-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Launch help from GParted using the new GNOME 3 help: prefix (!24)
    
    Update GParted to specify the GParted Manual using the new GNOME 3 way
    with the 'help:' prefix to avoid yelp reporting this error:
        Document Not Found
        The URI 'ghelp:gparted' does not point to a valid page.
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2019-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow GNOME 3 yelp to display the GParted Manual (!24)
    
    Now with GNOME 3 style help installed, running 'yelp help:gparted'
    results in this error being displayed in yelp:
        Page Not Found
        The requested page was not found in the document 'help:gparted'.
    
    Where as running 'yelp help:gparted/gparted' correctly displays the
    GParted Manual.
    
    Fix by renaming the article tag to the default 'index' that yelp is
    expecting when using the new GNOME 3 'help:' prefix.
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2019-02-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add use of new GNOME 3 yelp-tools documentation infrastructure (!24)
    
    Second part is to use yelp-tools to build and install the documentation.
    Have to rename the help Manual from help/C/gparted.xml to
    help/C/index.docbook in accordance with this note from the GNOME Goal:
    Port to New Documentation Infrastructure [1]:
        IMPORTANT: If this is for a DocBook document, the top-level DocBook
        file MUST be renamed to index.docbook.  Do a "git mv" and include
        index.docbook in HELP_FILES.
    
    Commits from gucharmap [4] and totem [5], projects which have DocBook
    documentation, making this same change are also useful references.
    
    [1] GNOME Goal: Port To New Documentation Infrastructure
        https://wiki.gnome.org/Initiatives/GnomeGoals/NewDocumentationInfrastructure
    
    [2] Yelp > Yelp Tools > yelp.m4
        http://yelp.io/tools/yelp.m4.html
    
    [3] GNOME application developement overview / User help / Set up your
        build system
        https://developer.gnome.org/platform-overview/stable/dev-help-build.html.en
    
    [4] gucharmap commit "Port to new documentation infrastructure"
        https://gitlab.gnome.org/GNOME/gucharmap/commit/3e1526c0568f0b395fce68f9d9e09431dfcaef35
    
    [5] totem commit "Use new documentation infrastructure"
        https://gitlab.gnome.org/GNOME/totem/commit/59a6bd6064fe7dd047f7b61642aba73e0ba72acf
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2019-02-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove use of GNOME 2 gnome-doc-utils documentation infrastructure (!24)
    
    Details of old GNOME 2 gnome-doc-utils:
        Migrating your documentation to gnome-doc-utils
        https://wiki.gnome.org/Projects/GnomeDocUtils/MigrationHowTo
    
    First part is to stop using gnome-doc-utils to build and install the
    documentation.  Also since updating the OMF catalog was only needed for
    GNOME 2 yelp, use of scrollkeeper is completely removed too.
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2013-07-31  Jeremy Bicha <jbicha@ubuntu.com>

    Fix FDL help link for gnome-desktop 3.5+ (!24)
    
    I generated this by running:
        find ./ -type f -exec sed -i 's/ghelp:fdl/help:fdl/g' {} \;
    
    By updating the translations at the same time, it should be easier on
    the translators as there's no reason to invalidate these strings.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=704634#c8
    
    [Mike Fleetwood: Explain the underlying cause and distro versions.]
    This gnome-desktop commit, first included in version 3.5.5, switched the
    package from using gnome-doc-utils to yelp-tools so changed the
    installed location of the GNU FDL license file from
    /usr/share/gnome/help/fdl/C/fdl.xml to
    /usr/share/help/C/fdl/index.docbook, thus changing the yelp URI from
    'ghelp:fdl' to 'help:fdl':
        https://gitlab.gnome.org/GNOME/gnome-desktop/commit/8b7e059e2c01ec67d8aaf33133e695efae2173f8
        Port to new documentation infrastructure
    
    The oldest supported distributions with Gtk/GNOME 3 all have at least
    3.10, therefore use this fix unconditionally.
    
        Distribution        EOL         Gtk/GNOME 3
        RHEL / CentOS 7     2024-Jun    3.22
        Ubuntu 14.04 LTS    2019-Apr    3.10
        Ubuntu 16.04 LTS    2021-Apr    3.18
        Debian 8            2023-Apr    3.14
        SLES 12             2027-Oct    3.10
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2019-02-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant file help/C/Makefile.am (!24)
    
    The file has been redundant since it was first added [1].  It was never
    listed in configure.ac (or configure.in) in AC_CONFIG_FILES.  Therefore
    autoconf has never produced help/C/Makefile.in and ./configure has never
    produced help/C/Makefile.  Therefore it isn't used during the build and
    install of GParted.  Remove it.
    
    [1] 46ca7c74dca80b4b6ec8f6596832510cdc7f714b
        Added code hooks to prepare for GParted Manual
    
    Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure

2019-02-28  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2019-02-26  Nathan Follens <nathan@anche.no>

    Update Dutch translation

2019-02-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove left behind configuration summary lines (!22)
    
    These lines in the final configuration report from ./configure were left
    behind [1] when determination of the underlying definitions were remove.
    So they no longer report 'yes' or 'no' like the other lines in the file
    configuration report.
    
           Need partition table re-read workaround?  :
         Supports large sector sizes (> 512 bytes)?  :
    
    Remove them now.
    
    [1] 8df975c7d1b5d69897f286bfc5574c51cf58c9d5
        Increase minimum required libparted to 2.2 (!22)
    
    Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32

2019-02-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove left behind commented #includes from fat16.cc
    
    According to the GIT history the lines were added by this commit:
        8d808c0b62a8387ba1703a0493746add5785fff5
        gparted-0.3.6 - code recreation from Source Forge
    
    Looking at the SVN history this commit actually fleshed out the
    implementations of fat16::get_label() and fat32::get_label() and added
    the commented #includes:
        https://sourceforge.net/p/gparted/svn/118
        Added read label support for fat16 and fat32 using mtools mlabel command
        2008-02-12
    
    Then this SVN commit moved the mtools temporary file handling code into
    Utils.cc, leaving behind the commented #includes:
        https://sourceforge.net/p/gparted/svn/124
        Added MTools temporary file handling functions
        2008-02-19
    
    Finally this commit removed fat32.cc by merging the code with fat16.cc:
        519af1a7c08667c53e602012e2a49cbf5301f40c
        Combine duplicate code for fat16/32
    
    So remove the left behind commented #includes from fat16.cc.

2019-02-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable online resizing of extended partitions (!23)
    
    A forum user had a case where they wanted to grow their in use root,
    ext4 file system.  GParted supports this, but the partition was a
    logical partition inside an extended partition and GParted doesn't
    support resizing an extended partition while any contained logical
    partitions are busy.
    
    Example layout:
    
        Partition              File System   Mount Point
        /dev/sdb1              ntfs
        /dev/sdb2     [busy]
            /dev/sdb5 [busy]   ext4          /
        unallocated            unallocated
    
    So just allow extended partitions to be resized online when online
    partition resizing is available via libparted.
    
    NOTE:
    The block device that the Linux kernel provides for an extended
    partition just maps to the first 1 KiB of the extended partition where
    the Extended Boot Record is stored, and does not include any of the
    contained logical partitions.  Therefore no application can care that
    the extended partition is resized while a logical partition is in use
    because it can't use the extended partition block device to access any
    data.
    
    The on disk layout looks like this:
    
        # fdisk -l /dev/sdb
    
        Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
        Units = sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk label type: dos
        Disk identifier: 0x0007650e
    
           Device Boot      Start         End      Blocks   Id  System
        /dev/sdb1            2048     1050623      524288    7  HPFS/NTFS/exFAT
        /dev/sdb2         1050624     2101247      525312    5  Extended
        /dev/sdb5         1052672     2101247      524288   83  Linux
    
        # parted /dev/sdb unit s print free
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 16777216s
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
        Disk Flags:
    
        Number  Start     End        Size       Type      File system  Flags
                63s       2047s      1985s                Free Space
         1      2048s     1050623s   1048576s   primary   ntfs
         2      1050624s  2101247s   1050624s   extended
         5      1052672s  2101247s   1048576s   logical   ext4
                2101248s  16777215s  14675968s            Free Space
    
    The kernel's partition sizes from /sys/block/sdb/sdb${N}/{start,size}
    shows extended partition 2 has a size of only 2 sectors:
    
        # for N in 1 2 5
        > do
        > echo -e "/dev/sdb${N}\tstart=`cat /sys/block/sdb/sdb${N}/start`\tsize=`cat /sys/block/sdb/sdb${N}/size`"
        > done
        /dev/sdb1       start=2048      size=1048576
        /dev/sdb2       start=1050624   size=2
        /dev/sdb5       start=1052672   size=1048576
    
    The EBR read from the whole of extended partition 2 block device:
    
        # hexdump -C /dev/sdb2
        00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 86  |................|
        000001c0  06 41 83 cb 09 82 00 08  00 00 00 00 10 00 00 00  |.A..............|
        000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
        00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
        *
        00000400
    
    Closes !23 - Enable online resizing of extended partitions

2019-02-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise contribution by Luca Bacci

2019-01-22  Luca Bacci <luca.bacci982@gmail.com>

    Prevent the legend text making the features dialog too wide (#7)
    
    With the Gtk3 port the File System Support dialog has become too wide
    because the legend text is no longer wrapped.  Set the max-width-chars
    property to specify the natural size of the widget in terms of
    characters [1].  It is converted to pixels using the average character
    width in the current font.
    
    Also use PACK_EXPAND_WIDGET when adding the label to the box so that if
    the dialog is resized extra space is used to increase the size of this
    child widget [2].
    
    [1] GNOME HowDoI / Labels
        https://wiki.gnome.org/HowDoI/Labels
    
    [2] Gtkmm 3.0 Enums and Flags, enum Gtk::PackOptions
        "PACK_EXPAND_WIDGET  Space is expanded, with extra space filled by
        increasing the child widget size."
        https://developer.gnome.org/gtkmm/3.0/group__gtkmmEnums.html#ga83727a1b6fed51566dfd5c8e58890dba
    
    Closes #7 - Port to Gtk3

2019-01-22  Luca Bacci <luca.bacci982@gmail.com>

    Enable display of progress bar text when applying operations (#7)
    
    In Gtk2 progress bars show optional text superimposed over the bar.  In
    Gtk3 the text is not displayed by default, so set the show-text property
    to re-enable this [1].
    
    Also note that since Gtk 3.14.0 the optional text is not superimposed
    over the progress bar, but instead displayed just above it [2][3][4].
    
    References:
    
    [1] Gtkmm 3.0 Gtk::ProgressBar Class Reference, set_show_text()
        "Sets whether the progressbar will show text superimposed over the
        bar."
        https://developer.gnome.org/gtkmm/3.0/classGtk_1_1ProgressBar.html#a0bfa6042f5d4b3509967abc2d8af57fe
    
    [2] Commit - Update the design for progress bars
        https://gitlab.gnome.org/GNOME/gtk/commit/74405cc964e405ea00cfac22856a62fea5ec648e
    
    [3] Bug 748784 - GtkProgressBar text cannot be superimposed on the
        progress bar
        https://bugzilla.gnome.org/show_bug.cgi?id=748784
    
    [4] Gtkmm 3.18 Gtk:ProgressBar Class Reference, set_show_text()
        "Set whether the progress bar will show text next to the bar."
        https://developer.gnome.org/gtkmm/3.18/classGtk_1_1ProgressBar.html#a0bfa6042f5d4b3509967abc2d8af57fe
    
    Closes #7 - Port to Gtk3

2019-01-22  Luca Bacci <luca.bacci982@gmail.com>

    Ensure SpinButtons have space to display 7 digits (#7)
    
    In Gtk2 the up and down buttons in a SpinButton were smaller leaving
    space for 7 digits before scrolling the entry.  In Gtk3 the up and down
    buttons are much larger leaving only space for 4 digits.  This occurs in
    the SpinButtons in the Dialog_Base_Partition class as displayed in the
    New Partition, Paste and Resize/Move dialogs.
    
    Set width-chars property of all Gtk::SpinButtons to ensure 7 digits can
    be displayed before scrolling the entry.
    
    Closes #7 - Port to Gtk3

2019-01-22  Luca Bacci <luca.bacci982@gmail.com>

    Change Gtk::ProgressBar appearance by providing custom CSS (#7)
    
    In Gtk3 the progress bar height is fixed and defined by the CSS theme in
    use.  Changing the widget allocation size does nothing, it is always
    rendered the same way.
    
    In many themes, including Adwaita, the progressbar is very, very thin.
    Provide custom CSS to specify a height of 8 pixels.
    
    The CSS source string has to be differentiated for Gtk pre and post
    3.20, because Gtk 3.20 introduced some breaking changes in the way CSS
    is handled.
    
    References:
    
    [1] Migrating from GTK+ 2.x to GTK+ 3 - Parsing of custom resources
        https://developer.gnome.org/gtk3/stable/gtk-migrating-GtkStyleContext-parsing.html
    
    [2] Gtk3 Reference Documentation - Changes in GTK+ 3.20
        https://developer.gnome.org/gtk3/stable/ch32s10.html
    
    [3] Gnome/HowDoI - Custom Style
        https://wiki.gnome.org/HowDoI/CustomStyle
    
    Closes #7 - Port to Gtk3

2018-08-28  Luca Bacci <luca.bacci982@gmail.com>

    Change packing of pulsebar in statusbar (#7)
    
    The pulsebar looks very small and needs to be widened.  The pulsebar is
    packed inside the statusbar so that it displays activity text on the
    left side and the pulsebar on the right side.  Ideally we want the space
    to be evenly divided for the textual messages and for the pulsebar
    activity indicator.
    
    For this we just have to set the 'homogeneous' property to TRUE for the
    statusbar (note that GtkStatusBar inherits from GtkBox).
    
    Also vertically align the pulsebar to the center of the statusbar.  This
    is achieved setting the 'valign' property to Gtk::ALIGN_CENTER for the
    pulsebar widget.
    
    Closes #7 - Port to Gtk3

2018-08-30  Luca Bacci <luca.bacci982@gmail.com>

    Work around Gtk3 Gtk-CRITICAL messages when closing some dialogs (#7)
    
    There is a bug affecting Gtk+ 3.22.8 to 3.22.30 in which destroying a
    GtkComboBox when it is not hidden results in this message:
    
        Gtk-CRITICAL **: gtk_widget_is_drawable: assertion 'GTK_IS_WIDGET (widget)' failed
    
    This happens in GParted when some dialogs are closed, for example the
    Create New Partition and Create Partition Table dialogs.  To work around
    the issue we call Gtk::Dialog::hide() in the destructors of our dialog
    classes.
    
    The issue was fixed in Gtk 3.24.0.
    
     * Gtk 3.22.8 was released in February 2017.
     * Gtk 3.24.0 was released in September 2018.
    
    References:
    
    [1] Gtk Issue - GtkComboBox::private::popup_window can be NULL
        https://gitlab.gnome.org/GNOME/gtk/issues/125
    
    [2] Gtk commit - combobox: popdown() the menu during unmap()
        https://gitlab.gnome.org/GNOME/gtk/commit/7401794de6b084fea469af297b7c144724b8492c
    
    [3] Gtk commit - Check for NULL priv->popup_window in
        gtk_combo_box_popdown()
        https://gitlab.gnome.org/GNOME/gtk/commit/aa5d926c843aca2af576c38cf25ebdb4d3da2c26
    
    Closes #7 - Port to Gtk3

2018-11-21  Luca Bacci <luca.bacci982@gmail.com>

    Work around Gtkmm3 issue where menu accelerators are not shown (#7)
    
    There is a bug in Gtkmm3 when setting accelerator keys on a
    Gtk::MenuItem, the accelerator keys work but are not displayed when the
    menu is drawn.  This happens for Gtk::MenuItems, including derived
    objects, that are constructed with a non-default constructor.
    
    All non-default constructors of Gtk::MenuItem, and subclasses, work by
    creating themselves a Gtk::AccelLabel and packing it inside the menu
    item.  But in Gtk3 GtkMenuItem are created with a GtkAccelLabel already
    packed in as a child and that accel label should be used instead.
    
    To workaround the issue we only use the default constructor for
    Gtk::MenuItem and subclasses.  This is easy to do because we only have
    to change the wrappers in MenuHelpers.cc.
    
    This bug affects Gtkmm version 3.0.0 to 3.22.2 and was fixed in
    Gtkmm 3.22.3.
    
     * Gtkmm 3.0.0 was released in April 2011
     * Gtkmm 3.22.3 was released in November 2018
    
    References:
    
    [1] Bug Report on the Gtkmm mailing list
        https://mail.gnome.org/archives/gtkmm-list/2018-February/msg00006.html
    
    [2] Commit - Gtk::MenuItem: Fix add_accel_label()
        https://gitlab.gnome.org/GNOME/gtkmm/commit/e5c8c2df67d0d7ec255055984e8f07d0f0fa0862
    
    Closes #7 - Port to Gtk3

2018-08-13  Luca Bacci <luca.bacci982@gmail.com>

    Simplify code using Gtk::Container::get_children() (#7)
    
    GParted uses Gtk::Container::get_children().  In Gtkmm2
    Gtk::Container::get_children() returns a Glibmm intermediate container
    [1].  Gtkmm3 dropped the use of Glibmm intermediate containers in favour
    of STL containers [2][3].
    
    Now that Gtk::Container::get_children() directly returns a std::vector<>
    simplify the code.
    
    References:
    
    [1] Gtkmm 2.24 Gtk::Container Class Reference
        "Glib::ListHandle<Widget*> Gtk::Container::get_children()"
        https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Container.html#acd2f9b9ac16ba96178d3f5169b07f4d0
    
    [2] Gtkmm 3.0 Gtk::Container Class Reference
        "std::vector<Widget*> Gtk::Container::get_children()"
        https://developer.gnome.org/gtkmm/3.0/classGtk_1_1Container.html#a3a2111e255cb5b72bd91a3be087cff27
    
    [1] Programming with gtkmm3 / Changes in gtkmm3
        "11. We now use std::vector in several methods instead of the
        intermediate *Handle types to make the API clearer."
        https://developer.gnome.org/gtkmm-tutorial/3.0/changes-gtkmm3.html.en
    
    Closes #7 - Port to Gtk3

2018-09-05  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Block Gtk::TreeSelection changed handler on tree model clear (#7)
    
    Now GParted compiles with Gtkmm3, but we get a failed assertion doing
    the following:
     * Select a device with more than 1 partition
     * Select a partition
     * Activate 'Refresh Devices' (or do any operation that causes it, like
       mount/unmount etc.)
    
    This is the failed assertion:
        **
        ERROR:Win_GParted.cc:1152:void GParted::Win_GParted::set_valid_operations(): assertion failed: (valid_display_partition_ptr( selected_partition_ptr ))
        Aborted (core dumped)
    
    Where is the problem?
    
    Win_GParted::Refresh_Visual() calls TreeView_Detail::load_partitions()
    to clear and refill the treeview.
    
    The problem is in GParted::TreeView_Detail::load_partitions() at
    TreeView_Detail.cc:91:
        treestore_detail->clear();
    
    This activates TreeView_Detail::on_selection_changed() which in turn
    activates Win_GParted::on_partition_selected() passing an old, stale
    pointer as an argument.  This triggers the failed assertion.
    
    Why does this happen with Gtk3 and not with Gtk2?
    
    First a bit of background of GtkTreeView:
    
    What happens to the selection in a GtkTreeView when the selected row
    is removed?
    
    With Gtk2 the selection simply becomes empty, so nothing is selected
    afterwards.  With Gtk3 this was changed [1] and selection moves to an
    adjacent row.
    
    gtk_tree_store_clear() removes rows one by one.  While removing rows the
    selection changed signal is emitted.  With Gtk2 it is emitted only one
    time, to indicate that selection has become empty.  With Gtk3 it is
    instead emitted several times, each time indicating that selection has
    moved to the adjacent row.
    
    The handler TreeView_Detail::on_selection_changed() only takes action
    when the selection is not empty.  So with Gtk3 it really takes action
    and activates Win_GParted::on_partition_selected() with a pointer to old
    data.
    
    What's the purpose of TreeView_Detail::on_selection_changed()?
    
    Its task is to update the selection in the drawing area above the
    TreeViewDetail, the DrawingAreaVisualDisk, so that the selected
    partition stays in sync on the two widgets.
    
    Fix by blocking the signal handler during the treeview clear.
    
    Reference:
    [1] Commit - treeview: Handle the case where the cursor row gets deleted
        https://gitlab.gnome.org/GNOME/gtk/commit/1a2932ba2915c34171581a85afba39311e9c3ac6
    
    Closes #7 - Port to Gtk3

2018-08-09  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use Gdk::AppLaunchContext to launch yelp (#7)
    
    gdk_spawn_command_line_on_screen() is not present in Gtk3.  The
    documentation from Gtkmm 2.24 states [1]:
    
        gdk_spawn_command_line_on_screen has been deprecated since version
        2.24 and should not be used in newly-written code.  This function is
        being removed in 3.0.  Use either g_spawn_command_line_sync(),
        g_spawn_command_line_async() or GdkAppLaunchContext instead.
    
    g_spawn_command_line_sync() and g_spawn_command_line_async() are screen
    / display agnostic, as such we would loose functionality.  There is a
    workaround, which involves setting the DISPLAY environment variable [2],
    but it's a weak solution (and I don't know if it works on backends
    other than X11).
    
    GdkAppLaunchContext is an implementation of GIO's GAppLaunchContext that
    handles launching an application in a graphical context [3].  Therefore
    use GdkAppLaunchContext and GIO's GAppInfo.
    
    GdkAppLaunchContext was introduced in Gtk2 version 2.14.  The C++
    wrapper Gdk::AppLaunchContext was introduced only in Gtkmm3 version 3.4
    [4].  Bump the minimum required version of Gtkmm to 3.4.0 for this
    requirement.
    
    GAppInfo was introduced in GLib version 2.16.  The C++ wrapper
    Gio::AppInfo was introduced in Giomm version 2.16.  Note that the
    minimum required version for glibmm is already 2.32.
    
    [1] GDK 2 Reference Manual, GdkScreen, gdk_spawn_on_screen()
        https://developer.gnome.org/gdk2/2.24/GdkScreen.html#gdk-spawn-on-screen
    
    [2] Migrating from GTK+ 2.x to GTK+ 3 - "Use GIO for launching applications"
        https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.7
    
    [3] GDK 3 Reference Manual - "Application launching"
        https://developer.gnome.org/gdk3/stable/gdk3-Application-launching.html
    
    [4] Gtkmm 3.4 Gdk::AppLaunchContext Class Reference, Detailed Description
        https://developer.gnome.org/gtkmm/3.4/classGdk_1_1AppLaunchContext.html#details
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use Gtk::CellLayout::get_cells() (#7)
    
    GParted uses Gtk::TreeViewColumn::get_cell_renderers().  This is not
    present in Gtkmm3.  Now Gtk::TreeViewColumn inherits from
    Gtk::CellLayout and we have to use Gtk::CellLayout::get_cells() instead.
    
    GtkCellLayout was introduced in Gtk2 version 2.18 as the common
    interface for containers of cell renderers.
    
    The C++ wrapper Gtk::CellLayout was introduced in Gtkmm2 version 2.18,
    but Gtk::TreeViewColumn was never made to inherit from Gtk::CellLayout
    to avoid breaking the API / ABI.  That change was made for Gtkmm3.
    
    This is an excerpt from gtkmm/treeviewcolumn.h header in Gtkmm2:
      // TODO: Should be deprecated, but we cannot derive from CellLayout
      // without breaking API and ABI.
    
      /** Returns a list of all the cell renderers in the column,
       * in no particular order.
       *
       * @return A list of Gtk::CellRenderers.
       */
      Glib::ListHandle<CellRenderer*> get_cell_renderers();
    
    Replace Gtk::TreeViewColumn::get_cell_renderers() with base class
    method Gtk::CellLayout::get_cells().
    
    Reference:
    
    [1] Commit - "Deprecate get_cell_renderers implementations"
        https://gitlab.gnome.org/GNOME/gtk/commit/6abc52a29d2b15c255ada7d199b703a95f8c565b
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use draw signal in the partition resizer (#7)
    
    In Gtk2 widgets draw themselves in response to the expose event signal.
    In Gtk3 widgets draw themselves in response to the GtkWidget::draw
    signal, and the signal handler gets a Cairo context as an argument.
    
    Convert Gtk::DrawingArea rendering code to respond to the
    GtkWidget::draw signal.
    
    This commit is specific to the drawing area in the Create new Partition
    dialog and the Resize/Move dialog.
    
    Reference:
    
    [1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
        https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use draw signal in the partition visualizer (#7)
    
    In Gtk2 widgets draw themselves in response to the expose event signal.
    In Gtk3 widgets draw themselves in response to the GtkWidget::draw
    signal, and the signal handler gets a Cairo context as an argument.
    
    Convert Gtk::DrawingArea rendering code to respond to the
    GtkWidget::draw signal.
    
    This commit is specific to the drawing area contained in the main
    application window (also called the DrawingAreaVisualDisk).
    
    Reference:
    
    [1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
        https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use draw signal in the partition info dialog (#7)
    
    In Gtk2 widgets draw themselves in response to the expose event signal.
    In Gtk3 widgets draw themselves in response to the GtkWidget::draw
    signal, and the signal handler gets a Cairo context as an argument.
    
    Convert Gtk::DrawingArea rendering code to respond to the
    GtkWidget::draw signal.
    
    This commit is specific to the drawing area in the Partition Info
    dialog.
    
    Reference:
    
    [1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
        https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use Gtk::Widget::render_icon_pixbuf() (#7)
    
    In Gtk3/C, gtk_widget_render_icon() was deprecated in Gtk 3.0 [1].  In
    Gtkmm3/C++, Gtk::Widget::render_icon() was abruptly removed from Gtkmm
    3.0 and replaced with Gtk::Widget::render_icon_pixbuf() [2].
    
    Gtk::Widget::render_icon() [3] had an optional 3rd parameter which
    GParted never used.  Replace with Gtk::Widget::render_icon_pixbuf() [4].
    
    References:
    
    [1] GTK+ 3 Reference Manual, GtkWidget
        https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-render-icon
        "gtk_widget_render_icon has been deprecated since version 3.0 and
        should not be used in newly-written code."
    
    [2] Gtkmm 3.0.0 NEWS file
        "... Removed render_icon(), adding render_icon_pixbuf()."
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.0.0/NEWS#L187
    
    [3] Gtkmm 2.24 Gtk::Widget Class Reference, render_icon()
        https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Widget.html#a91efd1b5aed7c184506ddd5721710584
    
    [4] Gtkmm 3.0 Gtk::Widget Class Reference, render_icon_pixbuf()
        https://developer.gnome.org/gtkmm/3.0/classGtk_1_1Widget.html#a28bbbd0c1717e58343df56f7f422b106
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Use Gdk::Cursor via Glib::RefPtr<> (#7)
    
    Starting from Gtkmm3 Gdk::Cursor objects cannot be constructed directly,
    but instead you have to get a smart pointer to an instance by calling
    the static member function Gdk::Cursor::create().
    
    Gdk::Cursor::create() returns a Glib::RefPtr<Gdk::Cursor> object.
    
    Gtkmm3 always uses Glib::RefPtr<Gdk::Cursor> in its interface and never
    plain Gdk::Cursor.
    
    Reference:
    
    [1] Programming with gtkmm3, Changes in gtkmm3:
        https://developer.gnome.org/gtkmm-tutorial/3.24/changes-gtkmm3.html.en
        "... Gdk::Cursor are now used via Glib::RefPtr."
    
    Closes #7 - Port to Gtk3

2018-08-29  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Rework Gtk header includes (#7)
    
    In Gtk3 individual headers cannot be included directly in application
    code, only the header <gtk/gtk.h> can be included (with a few exceptions
    for some platform specific headers).
    
    This has always been considered good practice even for Gtk2, though was
    not a hard requirement.
    
    In Gtk3 this is enforced by preprocessor checks.  Failure to do so
    yields a preprocessor error and compilation fails:
    
      "error: Only <gtk/gtk.h> can be included directly."
    
    Change specific Gtk header includes to:
    
      #include <gtk/gtk.h>
    
    References:
    
    [1] Migrating from GTK+ 2.x to GTK+ 3 - "Do not include individual headers"
        https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.3
    
    [2] Commit - "Remove all traces of GDK_PIXBUF/GTK_DISABLE_SINGLE_INCLUDES"
        https://gitlab.gnome.org/GNOME/gtk/commit/5e29973773d4e2177f234675cc2a2b2016aa9fbc
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Rework Gtkmm header includes (#7)
    
    Now that we are compiling against Gtkmm3 there are missing declarations
    of Gtkmm identifiers due to changes in Gtkmm internal header structure.
    
    All we have to do is bring back the declarations by including the
    appropriate headers where needed.
    
    Add necessary Gtkmm header includes.
    
    Closes #7 - Port to Gtk3

2018-12-04  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Rework Glibmm header includes (#7)
    
    Now that we are compiling against Gtkmm3 there are missing declarations
    of Glibmm identifiers due to changes in Gtkmm internal header structure.
    
    All we have to do is bring back the declarations by including the
    appropriate headers where needed.
    
    Add necessary Glibmm header includes.
    
    Closes #7 - Port to Gtk3

2018-08-27  Luca Bacci <luca.bacci982@gmail.com>

    port-to-gtk3: Switch to Gtkmm3 (#7)
    
    Switch to Gtkmm3 in configure.ac.  Require version 3.0.0.
    
    Also update the build instructions in README and the package list in
    .gitlab-ci.yml.
    
    Starting from version 3.18.0 Gtkmm requires C++11 compilation [1][2][3].
    Add a check for Gtkmm >= 3.18.0 in configure.ac and enable C++11
    compilation accordingly.
    
    References:
    
    [1] Gtkmm 3.18.1 NEWS
        "Changes in 3.18 ... Use, and require C++11, ..."
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.18.1/NEWS#L35
    
    [2] Murray's Blog - "gtkmm now uses C++11"
        https://www.murrayc.com/permalink/2015/07/31/gtkmm-now-uses-c11
    
    [3] Murray's Blog - "gtkmm 3.18 and glibmm 2.46"
        https://www.murrayc.com/permalink/2015/09/25/gtkmm-3-18-and-glibmm-2-46
    
    Closes #7 - Port to Gtk3

2018-08-09  Luca Bacci <luca.bacci982@gmail.com>

    prepare-for-gtk3: Prepare for removal of Gtk::Widget::modify_fg() (#7)
    
    The Gtk::Widget::modify_fs() API was removed in Gtkmm3 [1] and also
    there is no direct replacement.  GParted uses this in one place.  So
    instead use the C gtk_widget_modify_fg() version that is still present
    in Gtk3.
    
    This is just a temporary change to port GParted to Gtk3.  In future this
    will be replaced as part of the switch from Gdk::Color to Gtk::RGBA,
    since Gdk::Color was deprecated in Gtkmm 3.10 [2].
    
    Reference:
    
    [1] https://gitlab.gnome.org/GNOME/gtkmm/commit/ee432e21901c8ee7f68f6562c46f9e5e6ef17de7
        commit message "... Remove the modify_*() methods, ..."
    
    [2] Gtkmm 3.10 Gdk::Color Class Reference
        https://developer.gnome.org/gtkmm/3.10/classGdk_1_1Color.html#details
            Deprecated:
            Use Gdk::RGBA instead.
    
    Closes #7 - Port to Gtk3

2018-08-02  Luca Bacci <luca.bacci982@gmail.com>

    prepare-for-gtk3: Prepare for removal of Gtk::Menu_Helpers::MenuList (#7)
    
    GParted uses Gtk::Menu_Helpers::MenuList helper class to access
    individual menu items.  This helper class made it easy to navigate menu
    items by index.
    
    Gtk::Menu_Helpers::MenuList was removed in the switch from Gtkmm2 to
    Gtkmm3 [1].  Instead, use a separate std::map<Gtk::MenuItem*> to keep
    track of individual Gtk::MenuItem objects.
    
    Reference:
    [1] Gtkmm 3 commit "MenuShell: Remove items()." removed the code
        https://gitlab.gnome.org/GNOME/gtkmm/commit/c8e47b0db5505db0e10e74ce1d7286c2230958b5
    
    Closes #7 - Port to Gtk3

2018-07-31  Luca Bacci <luca.bacci982@gmail.com>

    prepare-for-gtk3: Prepare for removal of Gtk::Menu_Helpers::Element (#7)
    
    Gtk::Menu_Helpers::Element class and subclasses help in Gtk::MenuItem
    widgets and also automate tasks like registering keyboard accelerators
    when parented to a top-level window [1][2].
    
    Gtk::Menu_Helpers::Element class and subclasses were removed in Gtkmm3
    [3].  Provide compatible implementations under the namespace
    GParted::Menu_Helpers.
    
    References:
    
    [1] gtkmm: Gtk::Menu_Helpers Namespace Reference
        https://developer.gnome.org/gtkmm/2.24/namespaceGtk_1_1Menu__Helpers.html
    
    [2] gtkmm: Gtk::Menu_Helpers::Element Class Reference
        https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Menu__Helpers_1_1Element.html
    
    [3] Gtkmm 3 commit "MenuShell: Remove items()." removed the code
        https://gitlab.gnome.org/GNOME/gtkmm/commit/c8e47b0db5505db0e10e74ce1d7286c2230958b5
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    prepare-for-gtk3: Replace deprecated GDK_<KeyName> constants (#7)
    
    During the switch from Gtk2 to Gtk3 keyname constants were renamed from
    GDK_<KeyName> to GDK_KEY_<KeyName> [1].  This was done to avoid name
    clashes in gobject-introspection and language bindings.  The new
    constant names were also backported to Gtk 2.22 [2].
    
    Make use of the new constant names.
    
    References:
    [1] Migrating from GTK+ 2.x to GTK+ 3 - "Replace GDK_<keyname> with GDK_KEY_<keyname>"
        https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.6
    
    [2] Commit - "gdk: Prefix keys with _KEY by default"
        https://gitlab.gnome.org/GNOME/gtk/commit/750c81f43dda6c783372b983e630ecd30b776d7e
    
    Closes #7 - Port to Gtk3

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    prepare-for-gtk3: Remove calls to Gtk::Dialog::set_has_separator() (#7)
    
    Originally in Gtk2, by default, dialogs showed a horizontal separator
    between the content area and the action area (buttons).  GParted
    explicitly called Gtk::Dialog::set_has_separator(false) for all it's
    dialogs to remove the separator.
    
    In Gtk2/Gtkmm2 2.22, separators were deprecated [1].  In Gtk3/Gtkmm3
    separators in dialogs were removed altogether, including all the related
    APIs [2][3][4].  Therefore remove all calls.
    
    References:
    [1] Commit - "Document separator-related api in GtkDialog as deprecated"
        https://gitlab.gnome.org/GNOME/gtk/commit/6f6650e6cff06ff7c7e70db634ab10510a80c04c
    
    [2] Commit - "Remove separators from dialogs"
        https://gitlab.gnome.org/GNOME/gtk/commit/d433a606111d89727530f71d7b956ba40655bcbf
    
    [3] GTK+ 3.0.0 NEWS file
        https://gitlab.gnome.org/GNOME/gtk/blob/3.0.0/NEWS#L779
        "
        Overview of Changed from GTK+ 2.90.6 to 2.90.7
        ==============================================
    
        * Various deprecated APIs have been removed:
        ...
        - GtkDialog separators, including the GtkDialog::has-separator
          property, including setter/getter, the GTK_DIALOG_NO_SEPARATOR
          flag and the GtkMessageDialog::use-separator style property
        "
    
    [4] Gtkmm 3.0.0 NEWS file
        https://gitlab.gnome.org/GNOME/gtkmm/blob/3.0.0/NEWS#406
        "
        * Dialog:
        - Remove get/set_has_separator() and property.
        - Constructors: Remove use_separator parameters.
        "
    
    Closes #7 - Port to Gtk3

2019-01-28  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2019-01-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update to Google Test 1.8.1
    
    Update to Google Test C++ test framework from release 1.8.0 to 1.8.1.
    Replace the following files and directories from Google Test 1.8.1:
        LICENSE
        README.md
        include/
        src/
    Note the LICENSE file is identical, where as the other files changed.
    
    Also see commit which initially added Google Test:
        87f7170a55e1a04aeca5412ebb97e0fe0bfe7b4c
        Add Google Test 1.8.0 files (#781978)

2019-01-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove custom main() from test_PipeCapture (!22)
    
    After removing Glib::thread_init() from test_PipeCapture's main() all it
    does is exactly what the built in Google Test main() does [1][2].  So
    use that instead like the other unit test programs do.
    
    [1] Google Test, Primer, Writing the main() Function
        https://github.com/google/googletest/blob/master/googletest/docs/primer.md#writing-the-main-function
    
    [2] Google Test 1.8.0, gtest_main.cc::main()
        file: lib/gtest/src/gtest_main.cc
        https://github.com/google/googletest/blob/release-1.8.0/googletest/src/gtest_main.cc#L34
    
    Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32

2018-12-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove deprecated Glib::thread_init() (!22)
    
    Use of Glib::thread_init() was deprecated in glibmm 2.32 [1].  The
    oldest supported distributions have these versions:
        Debian 8           glibmm 2.42.0
        RHEL / CentOS 7    glibmm 2.56.0
        SLES 12            glibmm 2.38.1
        Ubuntu 14.04 LTS   glibmm 2.39.93
    
    Checking further the glibmm 2.32 reference manual says this about
    Glib::thread_init() [2]:
        Initializes the GLib thread system.
    
        Deprecated:
        Calling thread_init() is no longer necessary and no longer has any
        effect.
    
    However only some of the glibmm example programs had Glib::thread_init()
    removed, others had it replaced by Glib::init() [3].  Again the glibmm
    2.32 reference manual says this about Glib::init() [4]:
        Initialize glibmm.
    
        You may call this more than once.  You do not need to call this if
        you are using Glib::MainLoop or Gtk::Main, because they call it for
        you.
    
    GParted does call Gtk::Main and test_PipeCapture does call
    Glib::MainLoop.  Therefore just raise the minimum version to glibmm 2.32
    and remove both calls to Glib::thread_init().
    
    [1] Glibmm 2.32 NEWS file
        https://gitlab.gnome.org/GNOME/glibmm/blob/2.32.0/NEWS#L207
    
    [2] glibmm 2.32, glibmm: Glib Namespace Reference, Glib::thread_init()
        https://developer.gnome.org/glibmm/2.32/namespaceGlib.html#ab26d01c776801f1fff00753e97af4fc7
    
    [3] glibmm commit "Avoid use of deprecates API in tests and examples."
        https://gitlab.gnome.org/GNOME/glibmm/commit/3e0fbb22c0d4814de4174d32e12a45cbad79980e
    
    [4] glibmm 2.32, glibmm: Glib Namespace Reference, Glib::init()
        https://developer.gnome.org/glibmm/2.32/namespaceGlib.html#ac90aee10d0b90e3d8a96a86b5394f87b
    
    Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32

2018-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum required libparted to 2.2 (!22)
    
    Raise the minimum required version of GNU Parted from 1.7.1 to 2.2,
    released 2010-02-16 [1][2].  The oldest supported distributions, also
    with gtkmm >= 2.24, since commit [3], are:
        Debian 8           parted 3.2
        RHEL / CentOS 7    parted 3.1
        SLES 12            parted 3.1
        Ubuntu 14.04 LTS   parted 2.3
    
    Raising the minimum required version allows removal of optional code
    associated with these definitions:
    *   USE_LIBPARTED_LARGE_SECTOR_SUPPORT
        Fallback code reporting ignored device with logical sector size
        other than 512 bytes.
    *   ENABLE_PT_REREAD_WORKAROUND
        Fallback code re-attempting to inform the kernel of partition
        changes.
    
    [1] GNU Parted 2.2 release announcement
        http://lists.gnu.org/archive/html/info-gnu/2010-02/msg00016.html
    
    [2] NEWS file from GNU Parted 2.2
        http://git.savannah.gnu.org/cgit/parted.git/tree/NEWS?h=v2.2
    
    [3] 8b42bab1eea572a2a43e99e3d86fe93920675599
        modern-gtk2: Require Gtkmm version 2.24 (!17)
    
    Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32

2019-01-20  Carmen Bianca BAKKER <carmen@carmenbianca.eu>

    Update Esperanto translation

2019-01-02  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2018-12-28  Yuras Shumovich <shumovichy@gmail.com>

    Add Belarusian translation

2018-12-13  Curtis Gedak <gedakc@gmail.com>

    Update name typo in NEWS file

2018-12-13  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2018-12-13  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.33.0   ==========

2018-12-11  Milo Casagrande <milo@ubuntu.com>

    Update Italian translation

2018-12-09  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2018-12-06  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2018-12-06  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2018-12-05  Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>

    Update Esperanto translation

2018-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Strip unnecessary scope from GParted::STAT_* (!20)
    
    The code inconsistently uses GParted:: scope in front of STAT_*.
    
        $ fgrep 'GParted::STAT_' src/*.cc | wc -l
        3
        $ egrep '[^:]STAT_' src/*.cc | wc -l
        41
    
    GParted:: scope resolution is unnecessary as all the code is inside the
    GParted scope, except for main().  So remove it.
    
    Closes !20 - Minor namespace and scope operator tidy-ups

2018-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Strip unnecessary scope from GParted::TYPE_* (!20)
    
    The code inconsistently uses GParted:: scope in front of TYPE_*.
    
        $ fgrep 'GParted::TYPE_' src/*.cc | wc -l
        35
        $ egrep '[^:]TYPE_' src/*.cc | wc -l
        83
    
    GParted:: scope resolution is unnecessary as all the code is inside the
    GParted scope, except for main().  So remove it.
    
    Closes !20 - Minor namespace and scope operator tidy-ups

2018-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Strip unnecessary scope from GParted::FS_* (!20)
    
    The code inconsistently uses GParted:: scope in front of FS_*.
    
        $ fgrep 'GParted::FS_' src/*.cc | wc -l
        41
        $ egrep '[^:]FS_' src/*.cc | wc -l
        441
    
    GParted:: scope resolution is unnecessary as all the code is inside the
    GParted namespace, except for main().  So remove it.
    
    Closes !20 - Minor namespace and scope operator tidy-ups

2018-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Strip unnecessary scope from GParted::FS::* (!20)
    
    The code inconsistency uses GParted::FS::* and FS::*.
    
        $ fgrep 'GParted::FS::' src/*.cc | wc -l
        97
        $ egrep '[^:]FS::' src/*.cc | wc -l
        152
    
    GParted:: scope resolution is unnecessary as all the code is inside the
    GParted namespace, except for main().  So remove it.
    
    Closes !20 - Minor namespace and scope operator tidy-ups

2018-11-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Put Frame_Resizer_{Base,Extended} modules into GParted namespace (!20)
    
    All the other modules are in the GParted namespace, except for main()
    which has to be in the global namespace, so put these in the GParted
    namespace too.
    
    Closes !20 - Minor namespace and scope operator tidy-ups

2018-11-25  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2018-11-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix false usage figures for busy SWRAID members (#27)
    
    Create an active Linux Software RAID member which is larger than /dev
    virtual file system and GParted will report the usage figure of the /dev
    virtual file system for the SWRAID member.
    
        # df -h /dev
        Filesystem      Size  Used Avail Use% Mounted on
        devtmpfs        732M     0  732M   0% /dev
        # sgdisk -n 1:1M:+1G /dev/sdb
        # mdadm --create --verbose /dev/md1 --level=linear --raid-devices=1 --force /dev/sdb1
        mdadm: Defaulting to version 1.2 metadata
        mdadm: array /dev/md1 started.
    
    GParted reports the usage of /dev/sdb1 as:
        Partition  Mount Point  Size     Used   Unused     Unallocated
        /dev/sdb1  /dev/md1     1.00GiB  0.00B  731.04MiB  292.96MiB
    
    However GParted should have reported the usage as "---" for unknown
    because it isn't coded to query the size of the SWRAID member within a
    partition.
    
    The fault has been bisected to this commit:
        Extend un/mounting and usage reporting to unsupported file systems (!13)
        95903efb1f284f3d6819f38e894dc6c3464b2183
    
    What happens for busy Linux Software RAID array members:
    *   GParted_Core::is_busy()
        has custom code to identify busy members.
    *   GParted_Core::set_mountpoints()
        has custom code to add the array device name as the "mount point" of
        the member.
    *   GParted_Core::set_used_sectors()
        falls into the else not a supported file system (because SWRAID
        doesn't have a derived FileSystem implementation class).
    *   GParted_Core::mounted_set_used_sectors()
        is called to get the file system usage of mounted, but unsupported
        file systems, such as UFS and any others.
    *   Utils::get_mounted_filesystem_usage()
        is called which queries the kernel using statvfs() and gets the file
        system usage of the /dev virtual file system because the array
        device name will always start /dev.
    
    Fix by ensuring that GParted only asks the kernel for the usage of paths
    which it knows are mount points of mounted file systems.  (As read from
    /proc/mounts and cached in the Mount_Info module).  Also rename the
    method, by inserting "_fs", to mounted_fs_set_used_sectors() to remind
    us that it is for mounted *file systems* only.
    
    Closes #27 - GParted may report incorrect usage for SWRAID partitions
                 instead of unknown
    
    S

2018-10-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise contribution by Luca Bacci

2018-08-02  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Cairo for drawing the partition visualizer (!17)
    
    Third commit in a series to convert Gdk::GC based drawing to Cairo based
    drawing.  This specific commit makes the transition for the graphical
    partition visualizer widget that is used in the main application window.
    
    Closed !17 - Gtk2 modernisation

2018-08-02  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Cairo for drawing the partition info (!17)
    
    Second commit in a series to convert Gdk::GC based drawing to Cairo
    based drawing.  This specific commit makes the transition for the
    graphical partition info widget that is used in the "Information about"
    dialog.
    
    Closes !17 - Gtk2 modernisation

2018-08-02  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Cairo for drawing the partition resizer (!17)
    
    GdkGC has been deprecated in the underlying C / GTK+ 2.22 library.  It
    is less clearly stated but Gdk::GC is also deprecated in C++ / gtkmm.
    Cairo based rendering should be used instead.
    https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html
    https://gitlab.gnome.org/GNOME/gtk/blob/2.22.0/NEWS#L124
    https://developer.gnome.org/gtkmm/2.24/classGdk_1_1GC.html
    
    First commit in a series to convert Gdk::GC based drawing to Cairo based
    drawing.  This specific commit makes the transition for the graphical
    partition resizing widget that is used in the "Create New Partition",
    "Paste" creating new partition and "Resize/Move" dialogs.
    
    Cairo is not pixel based but instead uses a continuous coordinate space.
    To draw in a pixel aligned way follow the guidance in the Cairo FAQ.
    https://www.cairographics.org/FAQ/#sharp_lines
    
    Additional references:
    https://developer.gnome.org/gdk2/stable/gdk2-Drawing-Primitives.html#gdk-draw-line
    https://developer.gnome.org/gdk2/stable/gdk2-Drawing-Primitives.html#gdk-draw-rectangle
    
    Closes !17 - Gtk2 modernisation

2018-10-27  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Delay construction of Gtk::TreeModel* objects (!17)
    
    C++ initialises static member variables before main() is called.
    Therefore the static members of:
        struct Slots
        {
            static Gtk::TreeModelColumn<Glib::ustring> text;
            static Gtk::TreeModelColumn<bool> sensitive;
        private:
            static Gtk::TreeModel::ColumnRecord record_;
        };
    are constructed before Gtk::Main() is called in main().  However the
    Gtkmm documentation specifically says that they must be constructed
    afterwards [1].
    
    Resolve this by using the Construct On First Use Idiom [2] to delay
    initialisation until the slots are first used.  Normally this idiom uses
    static local objects, however it is being applied to class static
    objects here because the objects are accessed in many methods.  The
    downside of this approach is that the objects are never destructed,
    which memory analysers like Valgrind could see as a memory leak, but
    that is actually deliberate.  That leak can be removed once we can use
    C++11 and std::unique_ptr.
    
    [1] gtkmm: Gtk::TreeModelColumnRecord Class Reference
        https://developer.gnome.org/gtkmm/2.24/classGtk_1_1TreeModelColumnRecord.html#details
    
        "Neither TreeModel::ColumnRecord nor the TreeModelColumns contain
        any real data - they merely describe what C++ type is stored in
        which column of a TreeModel, and save you from having to repeat that
        type information in several places.
    
        Thus TreeModel::ColumnRecord can be made a singleton (as long as you
        make sure it's instantiated after Gtk::Main), even when creating
        multiple models from it.
        "
    
    [2] C++ FAQ / How do I prevent the "static initialization order
        problem"?
        https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use
    
    Closes !17 - Gtk2 modernisation

2018-08-03  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Rename callback after OptionComboBox class switch (!17)
    
    Final part in a series of commits to replace Gtk::OptionMenu widgets
    with GParted::OptionComboBox.
    
    This specific commit renames the signal handler callback to match the
    previously renamed combobox widget variable names.
    
    Closes !17 - Gtk2 modernisation

2018-07-31  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use OptionComboBox class for file system combobox (!17)
    
    Third part in a series of commits to replace Gtk::OptionMenu widgets
    with GParted::OptionComboBox.
    
    This specific commit is about file system combobox.
    
    Closes !17 - Gtk2 modernisation

2018-07-31  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use OptionComboBox class for partition type combobox (!17)
    
    Second part in a series of commits to replace Gtk::OptionMenu widgets
    with GParted::OptionComboBox.
    
    This specific commit is about partition type combobox.
    
    Closes !17 - Gtk2 modernisation

2018-07-31  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use OptionComboBox class for alignment combobox (!17)
    
    First part in a series of commits to replace Gtk::OptionMenu widgets
    with GParted::OptionComboBox.
    
    This specific commit is about partition alignment combobox.
    
    Closes !17 - Gtk2 modernisation

2018-07-30  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Introduce OptionComboBox class (!17)
    
    Gtk::OptionMenu is a combobox type widget that is constructed from a
    Gtk::Menu rather than a Gtk::TreeModel.  However Gtk::OptionMenu was
    deprecated in gtkmm 2.4.1.
    
    In GParted the Gtk::OptionMenu widget is used for:
    - partition alignment combobox
    - partition type combobox
    - file system combobox
    
    While they consist only of text we cannot use Gtk::ComboBoxText because
    it doesn't expose functionality in its interface to make items inactive.
    
    Create OptionComboBox helper class that builds a combobox consisting of
    only text items, much like Gtk::ComboBoxText, but has the added
    functionality to set items as inactive.
    
    References:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1OptionMenu.html#details
    https://gitlab.gnome.org/GNOME/gtkmm/blob/GTKMM_2_10_1/ChangeLog#L3515
    https://gitlab.gnome.org/GNOME/gtkmm/commit/bba503b0473413e474d9b6d297226479d29fd47f
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1ComboBoxText.html
    
    Closes !17 - Gtk2 modernisation

2018-08-13  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Gtk::Widget::set_tooltip_text() (!17)
    
    GParted was using Gtk::Tooltips widgets for tooltips, but they were
    deprecated in gtkmm 2.12 in favour of Gtk::Tooltip widgets.  (Note the
    spelling difference, with and without a trailing 's').
    
    As GParted's tooltips are all text only continue to use the shortcut,
    which is now Gtk::Widget::set_tooltip_text().
    
    References:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Tooltips.html#details
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Tooltip.html#details
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.20.0/NEWS#L740
    
    Closes !17 - Gtk2 modernisation

2018-08-13  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Gtk::MenuItem::unset_submenu() (!17)
    
    Gtk::MenuItem::remove_submenu() was deprecated in gtkmm 2.12.  Replace
    with Gtk::MenuItem::unset_submenu() introduced in gtkmm 2.22.
    
    References:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1MenuItem.html
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L24
    
    Closes !17 - Gtk2 modernisation

2018-08-11  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Gtk::AboutDialog::set_program_name() (!17)
    
    Gtk::AboutDialog::set_name() was deprecated in gtkmm 2.12.  Replace with
    Gtk::AboutDialog::set_program_name().
    
    References:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1AboutDialog.html
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.20.0/NEWS#L741
    
    Closes !17 - Gtk2 modernisation

2018-08-10  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Gtk::AlignmentEnum::ALIGN_START (!17)
    
    Gtkmm 2.22 deprecated Gtk::AlignmentEnum::ALIGN_{LEFT,RIGHT,TOP,BOTTOM}
    replacing with Gtk::AlignmentEnum::ALIGN_{START,END}.
    
    References:
    https://developer.gnome.org/gtkmm/2.24/group__gtkmmEnums.html#ga98983d4e80f67ffa5148dd554706ffac
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L14
    
    Closes !17 - Gtk2 modernisation

2018-08-10  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Gtk::TreeView::Column::get_first_cell() (!17)
    
    Gtk::TreeView::Column::get_first_cell_renderer() was deprecated in
    gtkmm 2.24.  Replace with Gtk::TreeView::Column::get_first_cell().
    
    References:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1TreeViewColumn.html
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.24.0/NEWS#L64
    
    Closes !17 - Gtk2 modernisation

2018-08-10  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Use Gtk::ComboBoxText::append() (!17)
    
    Gtk::ComboBoxText::append_text() was deprecated in gtkmm 2.24.  Replace
    with Gtk::ComboBoxText::append().
    
    References:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1ComboBoxText.html
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.24.0/NEWS#L20
    
    Closes !17 - Gtk2 modernisation

2018-08-27  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Always use Gtk::MessageDialog::get_message_area() (!17)
    
    Remove check for Gtk::Messagedialog::get_message_area() and associated
    fallback code as it is always available from gtkmm 2.22.
    
    Reference:
    https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L25
    
    Closes !17 - Gtk2 modernisation

2018-08-26  Luca Bacci <luca.bacci982@gmail.com>

    modern-gtk2: Require Gtkmm version 2.24 (!17)
    
    Require the latest minor version of gtkmm2, released back in 2011 [1].
    This is the first step in porting to Gtk3 [2].  This drops GParted
    support for very old but still supported distributions:
        Distribution      EOL        Gtkmm
        RHEL / CentOS 6   2020-Nov   2.18.2
        SLES 11           2022-Mar   2.14.1
    
    References:
    [1] ANNOUNCE: gtkmm 2.24.0
        https://mail.gnome.org/archives/gtkmm-list/2011-February/msg00038.html
    [2] Migrating from GTK+ 2.x to GTK+ 3 / Preparation in GTK+ 2.x
        https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3
    
    Closes !17 - Gtk2 modernisation

2018-08-27  Luca Bacci <luca.bacci982@gmail.com>

    Use Gtk::Viewport wrapper class
    
    There is a GtkViewport wrapper class in gtkmm, Gtk::Viewport.  Make use
    of that class instead of direct gtk calls.
    
    Reference:
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Viewport.html

2018-07-30  Luca Bacci <luca.bacci982@gmail.com>

    .gitignore: Do not track compile script
    
    Automake 1.14 also now always creates the 'compile' script.
    http://git.savannah.gnu.org/cgit/automake.git/tree/NEWS?h=v1.14#n110

2018-11-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enhance comment about the 3 levels of file system support
    
    Add a little extra explaining how the file systems' supported actions
    are determined.

2018-10-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Improve translation help for "unformatted" file system type

2018-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Adjust shades of aquamarine, cyan and orange
    
    The shades of aquamarine, cyan and orange didn't fit with the GNOME
    32-colour palette.  Create a set of aquamarine, cyan and orange shades
    which match the GNOME palette shades and update the colours of the
    relevant file systems accordingly.
        Aquamarine Hilight (#97DFC7) -
        Aquamarine Medium  (#70D2B1) - NTFS
        Aquamarine Dark    (#3EA281) - REFS
        Aquamarine Shadow  (#1F7258) -
        Cyan Hilight       (#95E3E5) - EXTENDED
        Cyan Medium        (#6FCECE) -
        Cyan Dark          (#3C9899) -
        Cyan Shadow        (#166F70) -
        Orange Hilight     (#E59F6A) -
        Orange Medium      (#E58749) - BTRFS
        Orange Dark        (#C26825) - ZFS
        Orange Shadow      (#984F18) -
    
    Note that the hues of aquamarine and cyan are quite close and for the
    thin outlines of partitions used in GParted they aren't easy to
    distinguish.  Hence also using different lightness to additionally
    separate the colour for extended partitions from NTFS and ReFS file
    systems.

2018-11-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise APFS (Apple File System) (#23)
    
    Just add detection of APFS using GParted's internal magic string
    detection.  It just matches 1 byte of the 2 byte object type and the
    4 byte magic field found in the super block [1].  See code comment for
    more details.
    
    Blkid has just gained recognition of APFS with util-linux v2.33 released
    06-Nov-2018 [2].
    
    This will write enough for GParted's simple internal detection to find
    APFS:
        # python -c '
        import sys
        sys.stdout.write("\0"*24 + "\1\0" + "\0"*6 + "NXSB")
        ' > /dev/sdb1
    
    [1] Apple File System Reference
        https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf
    
    [2] [ANNOUNCE] util-linux v2.33
        https://marc.info/?l=linux-fsdevel&m=154150400305928&w=2
    
    Closes #23 - GParted doesn't detect APFS (Apple File System)

2018-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch HFS and HFS Plus colours to a magenta range (#23)
    
    Currently Linux Swap, Linux Suspend, and HFS use reds from the GNOME
    32-colour palette with HFS Plus using serene red outside that palette.
        HFSPLUS       - Serene Red
        HFS           - Red Hilight
        LINUX_SWAP    - Red Medium
        LINUX_SUSPEND - Red Dark
                      - Red Shadow
    
    Apple have a new file system, APFS (Apple File System), which is a
    successor to HFS Plus [1][2].  With HFS Plus using a colour outside the
    GNOME 32-colour palette and there not being enough distinct reds
    available for a new file system, create a new range of magenta colours
    which fit with the GNOME palette and use them for the group of Apple
    file systems.
        Magenta Hilight (#D59FD4) - HFS
        Magenta Medium  (#B173B0) - HFSPLUS
        Magenta Dark    (#874986) - APFS
        Magenta Shadow  (#662C64) -
    
    This commit just moves HFS and HFS Plus to their new magenta colours.
    
    [1] About Apple File System
        https://developer.apple.com/documentation/foundation/file_system/about_apple_file_system
    
        "Overview
        Apple File System replaces HFS Plus as the default file system for
        iOS 10.3 and later, and for macOS High Sierra and later.  Apple File
        System offers improved file system fundamentals as well as several
        new features, including cloning, snapshots, space sharing, fast
        directory sizing, atomic safe-save, and sparse files.
        "
    
    [2] Apple File System Reference
        https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf
    
        "About Apple File System
        Apple File System is the default file format used on Apple
        platforms.  Apple File System is the successor to HFS Plus, so some
        aspects of its design intentionally follow HFS Plus to enable data
        migration from HFS Plus to Apple File System.  Other aspects of its
        design address limitations with HFS Plus and enable features such as
        cloning files, snapshots, encryption, and sharing free space between
        volumes.
        "
    
    Closes #23 - GParted doesn't detect APFS (Apple File system)

2018-11-02  Daniel Mustieles <daniel.mustieles.contractor@bbva.com>

    Updated Spanish translation

2018-11-02  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2018-10-21  Emin Tufan Çetin <etcetin@gmail.com>

    Update Turkish translation

2018-10-08  Curtis Gedak <gedakc@gmail.com>

    Update GParted appdata file (#12)
    
    Closes #12 - Appstream metadata needs valid license

2018-10-05  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2018-10-04  Stas Solovey <whats_up@tut.by>

    Update Russian translation

2018-09-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update GParted appdata file (#12)
    
    Update appdata file to be inline with the current AppStream
    specification [1].  Start by running:
        appstream-util upgrade gparted.appdata.xml.in
    and then editing the appdata as wanted.  Ensure that the file passes
    validation:
        appstream-util validate-relax --nonet gparted.appdata.xml.in
    
    When Richard Hughes added the appdata file he licensed it under the
    GFDL but assigned the copyright to Curtis Gedak [3].  Now change the
    license to CC0-1.0 [4] as that is what most appdata files are licensed
    under [5][6].  Curtis Gedak agrees to this by reviewing this change and
    being the committer of this commit.
    
    [1] AppStream specification
        https://www.freedesktop.org/software/appstream/docs/
    
    [2] Fedora Packaging Guidelines for AppData Files
        https://fedoraproject.org/wiki/Packaging:AppData
    
    [3] 640f92790b7cc5e91f367dfaa01a02a7497afbb4
        Add an AppData file (#709164)
    
    [4] CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
        https://creativecommons.org/publicdomain/zero/1.0/
    
    [5] Issue #12 - Appstream metadata needs valid license
        https://gitlab.gnome.org/GNOME/gparted/issues/12
    
    [6] Merge Request !15, note 331954 - Update GParted appdata file
        https://gitlab.gnome.org/GNOME/gparted/merge_requests/15#note_331954
    
    Closes #12 - Appstream metadata needs valid license

2018-09-23  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2018-09-22  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2018-09-22  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2018-09-21  Bernd Homuth <dev@hmt.im>

    Update German translation

2018-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disallow resizing btrfs if any of it's mount points are read-only (#10)
    
    No other file system allows this, but btrfs allows simultaneous mounting
    with different read-write permission.  Further, btrfs allows resizing
    via read-write mounts, but not via read-only mounts.
    
        # mkfs.btrfs /dev/sdb1
        btrfs-progs v4.15.1
        ...
        Filesystem size:    512.00MiB
        ...
        Number of devices:  1
        Devices:
           ID        SIZE  PATH
            1   512.00MiB  /dev/sdb1
    
        # mount -o ro /dev/sdb1 /mnt/1
        # mount -o rw /dev/sdb1 /mnt/2
        # grep sdb1 /proc/mounts
        /dev/sdb1 /mnt/1 btrfs ro,relatime,space_cache,subvolid=5,subvol=/ 0 0
        /dev/sdb1 /mnt/2 btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0
    
        # btrfs filesystem resize 1:500M /mnt/1
        Resize '/mnt/1' of '1:500M'
        ERROR: unable to resize '/mnt/1': Read-only file system
        # echo $?
        1
    
        # btrfs file system resize 1:500M /mnt/2
        Resize '/mnt/2' of '1:500M'
        # echo $?
        0
        # btrfs filesystem show /dev/sdb1
        Label: none  uuid: 74ccd37a-e665-4f25-b77e-a305b8a025e9
                Total devices 1 FS bytes used 128.00KiB
                devid    1 size 500.00MiB used 88.00MiB path /dev/sdb1
    
    Also with the above order of the read-only mount listed in /proc/mounts
    first and the read-write mount second, GParted again allows a resize
    operational to be tried, but if fails just like before:
    
        Grow /dev/sdb1 from 512.00 MiB to 1.0 GiB                  (ERROR)
        * calibrate /dev/sdb1                                      (SUCCESS)
        * grow partition from 512.00 MiB to 1.00 GiB               (SUCCESS)
        * grow filesystem to fill the partition                    (ERROR)
          * btrfs filesystem resize 1:max '/mnt/1'                 (ERROR)
              Resize '/mnt/1 to '1:max'
              ERROR: unable to resize '/mnt/1': Read-only file system
    
    What happened is that the Mount_Info module only stores single read-only
    flag against the mounted block device, not for each mount point, and as
    the first and second sdb1 lines from /proc/mounts were processed, the
    MountEntry became:
    
      1st)   mount_info[BS("/dev/sdb1")] -> {true , ["/mnt/1"]
      2nd)   mount_info[BS("/dev/sdb1")] -> {false, ["/mnt/1", "/mnt/2"]
    
    So GParted thought the file system was mounted read-write, but used the
    first mount point, /mnt/1, which was mounted read-only.
    
    This is a very unusual situation so unlikely to be encountered by users.
    Fix simply and safely by treating the mounted block device as mounted
    read-only if any of the mount points are mounted read-only, rather than
    just the last processed mount point.
    
    Closes #10 - Gparted fails to resize btrfs partition that is mounted
                 read-only

2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent online resizing of file systems mounted read-only (#10)
    
    Resizing a file system mounted read-only fails.  Example:
    
        # mkfs.btrfs /dev/sdb1
        # mount -o ro /dev/sdb1 /mnt/1
    
    In GParted try to resize partition sdb1.  The operation fails like this:
    
        Grow /dev/sdb1 from 512.00 MiB to 1.00 GiB                 (ERROR)
        * calibrate /dev/sdb1                                      (SUCCESS)
        * grow partition from 512.00 MiB to 1.00 GiB               (SUCCESS)
        * grow filesystem to fill the partition                    (ERROR)
          * btrfs filesystem resize 1:max '/mnt/1'                 (ERROR)
              Resize '/mnt/1' of '1:max'
              ERROR: unable to resize '/mnt/1': Read-only file system
    
    See GitLab issue for the testing results of attempting to online resize
    all supporting file system while mounted read-only.  No file system
    allows online resizing while mounted read-only, except for reiserfs.
        Issue #10 - Gparted fails to resize btrfs partition that is mounted
        read-only
        https://gitlab.gnome.org/GNOME/gparted/issues/10
    
    Fix by preventing online resizing of *all* file systems mounted
    read-only, including reiserfs.  Instead of displaying the resize dialog
    in this case, display an information dialog explaining why the partition
    can't be resized.  This is similar to what happens when attempting to
    create a new partition on a disk without a partition table.  The new
    dialog looks like:
    
        (!) Unable to resize read-only file system /dev/sdb1
            The file system can not be resized while it is mounted read-only.
            Either unmount the file system or remount it read-write.
                                                                       [ OK ]
    
    Closes #10 - Gparted fails to resize btrfs partition that is mounted
                 read-only

2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add and set read-only mount flag in the Partition object (#10)
    
    Set the partition read-only mount flag at the same time as setting the
    file system mount points.
    
    Closes #10 - Gparted fails to resize btrfs partition that is mounted
                 read-only

2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add parsing of read-only mount option into mount maps (#10)
    
    Parse file system mount options string from file and mount command
    output, extracting the setting for the read-only flag and storing in the
    mount maps.  Read-only flag for swap space gets the struct MountEntry
    constructor default of false.
    
    Closes #10 - Gparted fails to resize btrfs partition that is mounted
                 read-only

2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add read-only flag to mounted file system entries (#10)
    
    Just updates the 2 maps in the Mount_Info module so that they also have
    a read-only flag for each mount.  Ensure that when a struct MountEntry
    is created the readonly bool POD (Plain Old Data) type is initialised by
    the constructor.  Nothing yet sets or uses the flag.
    
    Closes #10 - Gparted fails to resize btrfs partition that is mounted
                 read-only

2018-09-19  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2018-09-18  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2018-09-18  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2018-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space tidy-up of Utils::get_filesystem_string()
    
    Use smart tab alignment, list cases in enumeration order and update
    translation help for unallocated space.

2018-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace open coding FS unknown usage check in prepare_new_partition()
    
    Back when unallocated space handling was being added, this case was not
    converted from open coding to using the provided method to check for
    unknown file system usage.  Specifically this commit missed using
    Partition::sector_usage_known() in
    Dialog_Base_Partition::prepare_new_partition():
    
        7ebedc4bb3b81e85fb4c628a2a05308ada147d68
        Don't show intrinsic unallocated space (#499202)
    
    Fix it now.

2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor get_filesystem_object()
    
    The function was using std::map::count() [1] to test if the file system
    entry existed in the map before looking up the value using
    std::map::operator[] to avoid having operator[] inserting elements which
    don't exist [2].
    
    Rewrite using std::map::find() [3] so that map is only searched once,
    and so that it is more obvious what is happening without having to know
    the subtleties of std::map::count() and ::operator[].
    
    [1] std::map::count()
        http://www.cplusplus.com/reference/map/map/count/
    
        "Searches the container for elements with a key equivalent to k and
        returns the number of matches.
    
        Because all elements in a map container are unique, the function can
        only return 1 (if the element is found) or zero (otherwise).
        "
    
    [2] std::map::operator[]
        http://www.cplusplus.com/reference/map/map/operator[]/
    
        "If k does not match the key of any element in the container, the
        function inserts a new element with that key and returns a reference
        to its mapped value.  Notice that this always increases the
        container size by one, even if no mapped value is assigned to the
        element (the element is constructed using its default constructor).
        "
    
    [3] std::map::find
        http://www.cplusplus.com/reference/map/map/find/
    
        "Searches the container for an element with a key equivalent to k
        and returns an iterator to it if found, otherwise it returns an
        iterator to map::end.
        "

2018-09-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Re-assign UFS to be a basic supported file system (!13)
    
    There is no prospect of there being ufs-tools on Linux.  The was a
    project which did release ufs-tools version 0.1 in 2004, but has been
    inactive since then.
        http://ufs-linux.sourceforge.net/
    
    Copying and moving is now implemented for file systems in the basic
    supported category.  Also mounting and unmounting of unsupported file
    system and reporting their usage while mounted has been added.  This is
    all the support that GParted has ever implemented for UFS.  Therefore
    re-assign UFS as a basic supported file system as it looses no
    functionality.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extend un/mounting and usage reporting to unsupported file systems (!13)
    
    For unsupported (including basic supported) file systems, also record
    the mount point(s) when mounted and from /etc/fstab when not.  This
    allows mounted unsupported file systems to be unmounted and ones with
    /etc/fstab entries to be mounted, just like fully supported file
    systems.
    
    Also for unsupported (again including basic supported) mounted file
    systems query the kernel for the usage, just like is already done for
    supported file systems.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly preview unknown FS usage when pasting into an existing partition (!13)
    
    When previewing copying a partition of unknown file system usage into an
    existing partition, the usage still shows that of the overwritten file
    system.  This affects existing supported file systems EXFAT, F2FS, MINIX
    and UFS and the new basic supported one too, all for which GParted can't
    read the file system usage.
    
    Handle the case of the source file system usage being unknown and
    explicitly set the copied usage to unknown too.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly preview unknown FS usage when pasting into a new partition (!13)
    
    GParted previews copying a partition of unknown file system usage into a
    new partition as 100% used.  This affects existing supported file
    systems EXFAT, F2FS, MINIX and UFS and the new basic supported ones too,
    all for which GParted can't read the file system usage.
    
    When preparing the working new_partition object in the Copy / Paste
    dialog, the maths for the known file system usage happened to convert
    the figures of used = -1 and unused = -1 into set_sector_usage(-1, 0).
    Those values passed to set_sector_usage() mean unable to query the file
    system size so assume it fills the partition and unused is 0, hence 100%
    used.
    
    Fix this by specifically handling the copying of file systems with
    unknown usage, setting the pasted file system usage to unknown too,
    used = -1 and unused = -1.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display "other" in the File System Support dialog (!13)
    
    To display the supported actions for all basic supported file systems to
    the users.
    
    Prepare the list of file system actions in Win_GParted because calling
    get_fs() for the "other" actions requires the gparted_core object and
    load_filesystems() currently doesn't have access to it.  One alternative
    would have been to make get_fs() and FILESYSTEMS static members of
    GParted_Core class.  Another alternative would have been to pass the
    gparted_core object to load_filesystems().  The chosen way seemed
    simplest.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add "other" file system type (!13)
    
    Want a single term under which the supported actions for all basic
    supported file systems are displayed in the File System Support dialog.
    "Unknown" isn't the correct adjective because the group includes
    unknown, but also includes: BitLocker, GRUB2 core image, ISO9660, Linux
    SWRaid, Linux Suspend, REFS and ZFS.  Add "other" file system type just
    for displaying in the dialog.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable copy and move for basic supported file systems (!13)
    
    Add copy and move supported action set for each basic supported file
    system.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Limit FILESYSTEM_MAP entries to supported and basic supported FSs (!13)
    
    Introduce a third category of basic file system support to go along with
    the existing full and none.  Use the file system's entry in
    FILESYSTEM_MAP to determine the level of support.  See comment in
    GParted_Core::init_filesystems() for details.
    
    Add and remove FILESYSTEM_MAP NULL pointer entries as required, so that
    only the file system types intended to have basic support have such
    entries.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Separate unknown file system type from unsupported actions (!13)
    
    PATCHSET OVERVIEW:
    
    Forum user wanted to be able to move a partition with unknown content:
        Topic: Can't move/rezise partition on android device (unknown format)
        http://gparted-forum.surf4.info/viewtopic.php?id=17742
    
    While GParted isn't going to be able to run any sort of file system
    check on the unknown content there isn't any reason why such a partition
    can't be copied or moved so long as the partition stays the same size.
    GParted can just use it's existing internal block copy routine it uses
    for copying and moving most partition content.  This is no different to
    a few of the already supported file system types which don't have a
    check-repair tool: exfat, f2fs, nilfs2, udf, ufs.
    
    This patchset introduces a third category called basic file system
    support to go along with the existing full and unsupported categories.
    Basic supported file systems will just use GParted's inbuilt
    capabilities to perform actions so they won't need a derived FileSystem
    implementation class.  Unknown file systems along with all other
    recognised, but otherwise unsupported, file systems will be assigned to
    this new basic supported category.
    
    THIS PATCH:
    
    FS_UNKNOWN is used when GParted is unable to identify the contents of a
    partition.  FS_UNKNOWN is also used to generate a file system support
    set with no supported actions, in the FileSystem::FS::FS() constructor
    and in GParted_Core::get_fs().
    
    As support for operations on partitions with unknown content is being
    added, the second usage will be confusing or even wrong.
    FS( FS_UNKNOWN ) constructs the no supported actions set, yet GParted
    will support some actions for the FS_UNKNOWN file system type.
    Therefore add FS_UNSUPPORTED for the second usage.
    
    Closes !13 - Support copying and moving of unsupported partition content

2018-09-17  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech help translation

2018-09-07  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2018-09-07  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2018-09-05  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2018-09-04  Efstathios Iosifidis <eiosifidis@gnome.org>

    Update Greek translation

2018-09-02  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2018-09-01  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2018-09-01  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2018-09-01  Rafael Fontenelle <rffontenelle@gmail.com>

    gparted.xml: closed -> closes
    
    The Open and Close pages use third person present tense for the "Choose:" paragraph. On the Close instruction, it had "closed" next to a "refreshes". So this commit simply applies present tense to "closed".

2018-08-28  Emin Tufan Çetin <etcetin@gmail.com>

    Update Turkish translation

2018-08-27  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2018-08-26  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2018-08-25  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2018-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    White space tidy-up of Utils::get_color()
    
    No functional change.  The code layout is old and a mess, not lining up
    vertically.  Use more common code layout and spaces to align text
    vertically.  List cases in enumeration order.  Identify each colour
    choice as either in the GNOME palette (no marking), an extended shade to
    a colour in the GNOME palette [+], or a colour outside the GNOME palette
    [*].
    
    There's lots of other switch statements just in Utils.cc which could do
    with tidying up, but this is the one I am looking at now.

2018-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch FAT16/32 colours to Accent Greens from the GNOME palette
    
    FAT16 was a fully saturated green (RGB #00FF00) and FAT32 was a little
    darker.  These are out of character with the colours from the GNOME
    palette for other file systems.  Change the colours to use near
    alternative Accent Greens from the GNOME colour palette.  So now we have
    the following file system colours, from light to dark:
        FAT16 - Accent Green Hilight
        FAT32 - Accent Green
        EXFAT - Accent Green Dark
        UDF   - Accent Green Shadow
    
    Strictly speaking only Accent Green and Accent Green Dark are part of
    the GNOME palette.  Accent Green Hilight and Accent Green Shadow are
    extensions expanding the range of Accent Greens.
    
        GNOME Human Interface Design 2.2.1 / Visual Design / colour /
        https://developer.gnome.org/hig-book/2.32/design-color.html.en
    
        "Guidelines
        * Use the GNOME color palette.  If you need a darker or lighter
          shade, start from one of the colors from the palette and darken or
          lighten as needed.
        "

2018-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add support for minix file system (!12)
    
    Util-linux package, at least as far back as version 2.23.2 as found on
    CentOS 7, provides the mkfs.minix and fsck.minix commands.  Also blkid
    from the same package, recognises minix file systems.
    
    Create version 3 file systems because MINIX 3 [1] is the only supported
    version and that reportedly uses version 3 of the file system [2].
    
    [1] MINIX 3 / History
        https://en.wikipedia.org/wiki/MINIX_3#History
    
    [2] Regarding MINIX 3 file system
        https://groups.google.com/forum/#!topic/minix3/3-TeHR_23X8
    
        "MINIX 3 uses Minix File System (MFS).  More precisely MFS V3."
    
    Closes !12 - Add minix file system support

2018-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use one shade darker blue for EXT2/3/4 file systems (!12)
    
    I see the MINIX file system as a kind of forerunner to EXT* because of
    it's history [1].  No body uses the original EXT file system any more,
    however the MINIX file system is still used by the MINIX 3 operating
    system.  So use the same range of colours for MINIX and EXT2/3/4.  Use
    one shade darker blue for EXT2/3/4, allowing MINIX to use the lightest
    blue.  After adding MINIX support in the next patch, the colours will
    become:
        MINIX - Blue Hilight
        EXT2  - Blue Medium
        EXT3  - Blue Dark
        EXT4  - Blue Shadow
    
    [1] MINIX file system / History
        https://en.wikipedia.org/wiki/MINIX_file_system#History
    
        "When Linus Torvalds first started writing his Linux operating
        system kernel (1991), he was working on a machine running MINIX, and
        adopted its file system layout.  This soon proved problematic, since
        MINIX restricted filename lengths to fourteen characters (thirty in
        later versions), it limited partitions to 64 megabytes, and the file
        system was designed for teaching purposes, not performance.  The
        Extended file system (ext; April 1992) was developed to replace
        MINIX's, but it was only with the second version of this, ext2, that
        Linux obtained a commercial-grade file system.  As of 1994, the
        MINIX file system was "scarcely in use" among Linux users.
        "
    
    Closes !12 - Add minix file system support

2018-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update bug links in the UI translation files too (!11)
    
    The translations which have been updated for the 0.32.0 release, and
    since the migration to GitLab hosting, have been updated with the new
    GitLab issue bug reporting URL.  Update all the remaining translation
    files to match.
    
    Closes !11 - Update bugzilla references

2018-08-22  Curtis Gedak <gedakc@gmail.com>

    Update bug links from Bugzilla to GitLab issues (!11)
    
    - Bugzilla has disabled reporting of new bugs.
    - Existing Bugzilla bug reports permit new comments only.
    - New bugs are to be created on GitLab issues.
    
    Reference:
    [GitLab] IMPORTANT: Mass migration plan
    https://mail.gnome.org/archives/desktop-devel-list/2018-March/msg00023.html
    
    Closes !11 - Update bugzilla references

2018-08-22  Curtis Gedak <gedakc@gmail.com>

    Fix broken XML tag in Romanian translation of help manual

2018-08-22  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2018-08-22  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.32.0   ==========

2018-08-22  A S Alam <amanpreet.alam@gmail.com>

    Update Punjabi translation

2018-08-21  صفا الفليج <safa1996alfulaij@gmail.com>

    Update Arabic translation

2018-08-20  Fabio Tomat <f.t.public@gmail.com>

    Add Friulian translation

2018-08-20  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2018-08-19  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2018-08-19  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2018-08-18  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2018-08-18  Jiri Grönroos <jiri.gronroos@iki.fi>

    Update Finnish translation

2018-08-18  Hannie Dumoleyn <hannie@ubuntu-nl.org>

    Update Dutch translation

2018-08-17  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2018-08-17  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2018-08-17  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2018-08-17  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2018-08-16  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2018-08-16  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2018-08-16  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2018-08-16  Emin Tufan Çetin <etcetin@gmail.com>

    Update Turkish translation

2018-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update help manual with opening and closing encrypted partitions (#795617)
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-08-13  Yi-Jyun Pan <pan93412@gmail.com>

    Update Chinese (Taiwan) translation

2018-07-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update Autoconf macro AX_CXX_COMPILE_STDCXX_11 to latest serial 18
    
    Update to the latest version of the AX_CXX_COMPILE_STDCXX_11 macro from
    the Autoconf Archive,  Note that the macro now depends on
    AX_CXX_COMPILE_STDCXX so this macro has to be included too.

2018-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused member Win_GParted::menu_item
    
    Usage of menu_item was removed in this commit from 2006.
    
        fb672f5219c5cceaae26246fb2c914478b8d2bbd
        happy new year ;) fixed some alignment issues removed confirmation dialogs

2018-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused members Win_GParted::label_device_info[12]
    
    Usage of members label_device_info1 and label_device_info2 was removed
    in this commit from 2004.
    
        8ae5ebb2e6d91e2671851e25659e19a90925d65c
        several (mostly) i18n related fixes/cleanups

2018-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Re-add getting EXT2/3/4 free space from dumpe2fs as a fallback (#8)
    
    If an EXT2/3/4 file system needs checking, then resize2fs will report an
    error, rather than report the minimum file system size.
    
        # mkfs.ext4 /dev/sdb11
        # resize2fs -P /dev/sdb11
        resize2fs 1.42.9 (28-Dec-2013)
        Estimated minimum size of the filesystem: 17012
        # debugfs -w -R "ssv state 0" /dev/sdb11
        # resize2fs -P /dev/sdb11
        resize2fs 1.42.9 (28-Dec-2013)
        Please run 'e2fsck -f /dev/sdb11' first.
    
        # echo $?
        1
    
    This will prevent GParted reading the file system usage and in turn
    GParted won't allow the file system to be shrunk.  Re-add the previous
    method of reading the free space from dumpe2fs output as a fallback.
    
    With this change, the worst case scenario is that GParted allows the
    user to attempt to shrink an unclean EXT4 file system, smaller that that
    which resize2fs allows and gets an error telling them so.  As part of
    the failed shrink operation GParted will have checked the file system so
    on refresh GParted will get the correct minimum size next time.
    
    This scenario only seems to apply to unclean EXT4 file systems because
    resize2fs has a larger minimum size that the free blocks would suggest
    because of extra space requirements when resizing EXT4 file systems [1].
    
    [1] e2fsprogs 1.44.3, resize/resize2fs.c:calculate_minimum_resize_size()
        https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/resize/resize2fs.c?h=v1.44.3#n2946
        /*
         * For ext4 we need to allow for up to a flex_bg worth of
         * inode tables of slack space so the resize operation can be
         * guaranteed to finish.
         */
    
        /*
         * We need to reserve a few extra blocks if extents are
         * enabled, in case we need to grow the extent tree.  The more
         * we shrink the file system, the more space we need.
         *
         * The absolute worst case is every single data block is in
         * the part of the file system that needs to be evacuated,
         * with each data block needs to be in its own extent, and
         * with each inode needing at least one extent block.
         */
    
    Closes #8 - Shrinking an EXT4 partition does not respect resize2fs
                limits

2018-07-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use resize2fs -P to get minimum EXT2/3/4 FS size (#8)
    
    A user reported GParted failed to shrink an EXT4 file system because
    GParted tried to shrink it smaller than resize2fs reported minimum size.
    Operation details were:
    
        Shrink /dev/sdc1 from 931.51 GiB to 605.00 GiB             (ERROR)
          calibrate /dev/sdc1                                      (SUCCESS)
            path: /dev/sdc1 (partition)
            start: 63
            end: 1953520064
            size: 1953520002 (931.51 GiB)
          check file system on /dev/sdc1 for errors and (if poss...(SUCCESS)
            e2fsck -f -y -v -C 0 '/dev/sdc1'                       (SUCCESS)
              ...
              158165624 blocks are used (64.77% of 244190000)
              ...
          shrink file system                                       (ERROR)
            resize2fs -p '/dev/sdc1' 634389176K                    (ERROR)
              resize2fs 1.44.2 (14-May-2018)
              resize2fs: New size smaller than minimum (171882113)
    
    The GParted figures:
     *  Partition size    = 1953520064 (512b sectors) = 976760032 KiB
     *  FS size           = 244190000 (4K blocks)     = 976760000 KiB
     *  Used FS size      = 158165624 (4K blocks)     = 632662496 KiB
     *  Requested FS size                             = 634389176 KiB
    The resize2fs figure:
     *  Minimum FS size   = 171882113 (4K blocks)     = 687528452 KiB
    
    GParted uses the number of free blocks in the file system to determine
    the minimum size it can shrink a file system to.  However resize2fs uses
    it's own internally calculated minimum size and won't shrink a file
    system below that size, as seen in the above details.  Resize2fs does
    have a force flag, (-f) which overrides some safety checks which are
    normally enforced, to allow it to try to shrink a file system smaller
    than it's calculated minimum.  GParted currently doesn't use the force
    flag and it seems unwise for it to start to do so.
    
    So for unmounted EXT2/3/4 file systems, change GParted to use
    'resize2fs -P' to get the minimum file system size, rather than using
    the number of free blocks direct from the super block, as reported by
    'dumpe2fs -h'.
    
    Mounted file systems still use statvfs() to provide file system usage.
    As mounted EXT2/3/4 file systems can't be shrunk the fact that statvfs()
    produces different, possibly smaller than minimum, figures than those
    from 'resize2fs -P' doesn't matter.
    
    Closes #8 - Shrinking an EXT4 partition does not respect resize2fs
                limits

2018-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Work in FS blocks until later while reading EXT2/3/4 usage (#8)
    
    No functional change.  Just work in FS block sized units until as late
    as possible in ext2::set_used_sectors(), before converting to device
    sector size units.  This is to make the following change simpler and
    easier to understand.
    
    Closes #8 - Shrinking an EXT4 partition does not respect resize2fs
                limits

2018-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop xmllint scrollkeeper-omf.dtd fetch failure breaking CI tests (#9)
    
    The GitLab Continuous Integration test stage jobs can fail like this:
    
        $ make check
        ...
        Making check in help
        make[1]: Entering directory `/builds/mfleetwo/gparted/help'
        ...
        xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' gparted-C.omf
        warning: failed to load external entity "http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd"
        Could not parse DTD http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd
        xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' gparted-cs.omf
        ...
        make[1]: *** [check-doc-omf] Error 2
        make[1]: Leaving directory `/builds/mfleetwo/gparted/help'
        make: *** [check-recursive] Error 1
        ERROR: Job failed: exit code 1
    
    It fails when the scrollkeeper.sourceforge.net site reports that
    SourceForge is undergoing maintenance or is temporarily unavailable.  I
    have seen this occur on 3 separate occasions in the last 4 weeks since I
    started experimenting with GitLab CI, which is rather too often.
    
    Xmllint comes from the GNOME 2 gnome-doc-utils.make rules used to build
    and validate GNOME 2 documentation.
    
    Fragment of useful Debian bug report 730688:
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=730688
        --disable-scrollkeeper requieres scrollkeeper installed
    
        "You can reproduce the problem in mdbtoools version 0.7.1-1 with no
        network, and rarian-compat not installed.
    
        When the network is available, buildd downloads the DTD for checks.
        When there is no network, gnome-doc-utils fails.
        "
    
    Fix by:
    (1) adding the rarian-compat package to the CI Docker images, which
        provides a local copy of the scrollkeeper-omf.dtd file;
    (2) adding the xmllint --nonet option to prevent fetching of DTDs
        remotely.
    
    With reference to earlier commit:
        0eb9f1fcfb2a438ecd85ad7e526f0ec3d01e2da6
        Reduce dependency on scrollkeeper (#743318)
    That commit allowed GParted to be installed on GNOME 3 desktops without
    requiring rarian-compat package to be installed.  This commit adds
    rarian-compat to the CI images so that 'make check' can succeed without
    accessing the Internet.  Just the intricate path to continue to build
    and test a GNOME 2 application in a world of GNOME 3 desktops with
    beginning to be reduced backward compatibility.
    
    Closes #9 - CI test jobs occasionally fail with xmllint not loading
                external entity http://scrollkeeper.sourceforce.net/dtds/
                scrollkeeper-omf-1.0/scrollkeeper-omf.dtd

2018-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop parallelising make distcheck in GitLab CI test jobs (!6)
    
    Unfortunately parallelising 'make distcheck' causes it to fail like
    this:
    
        $ nproc=`grep -c '^processor' /proc/cpuinfo` || nproc=1
        $ echo nproc=$nproc
        nproc=8
        ...
        $ make -j $nproc distcheck
        ...
        make[1]: Entering directory '/builds/mfleetwo/gparted/gparted-0.31.0-git/_build/sub'
        ERROR: files left after uninstall:
        ./share/icons/hicolor/icon-theme.cache
        Makefile:896: recipe for target 'distuninstallcheck' failed
        make[1]: Leaving directory '/builds/mfleetwo/gparted/gparted-0.31.0-git/_build/sub'
        make[1]: *** [distuninstallcheck] Error 1
        make: *** [distcheck] Error 1
        Makefile:840: recipe for target 'distcheck' failed
        ERROR: Job failed: exit code 1
    
    Therefore go back to serial 'make distcheck'.
    
    Closes !6 - Reduce the time taken by the GitLab CI jobs

2018-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Parallelise building GParted in GitLab CI jobs (!6)
    
    Reduce the time taken by the GitLab Continuous Integration jobs by
    parallelising make to use all available CPUs in the Docker CI image
    when it is building GParted code.  This includes 'make diskcheck'
    because that also does a second build of the GParted code in a separate
    subdirectory.
    
    Closes !6 - Reduce the time taken by the GitLab CI jobs

2018-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move enum CUSTOM_TEXT into FileSystem.h
    
    The CUSTOM_TEXT enumeration is exclusively used as the type of one of
    the parameters to the functions get_generic_text() and get_custom_text()
    in the FileSystem class and derived classes.  The definition of the
    enumeration therefore belongs in FileSystem.h.  Move it.

2018-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set FSType when constructing FS in luks::get_filesystem_support()
    
    This is functionally identical, but is just to follow established coding
    pattern [1] of specifying the FSType when constructing struct FS, rather
    and setting it afterwards.  luks.cc was added after the aforementioned
    commit, but was being developed in parallel so was created [2] following
    the old coding pattern.
    
    [1] 1a4cefb9601de47a1d4fdd31d60be9e37fadda2d
        Initialise all struct FS members
    
    [2] 070d734e57e8c10cfc4264b34e8bd95bba7cf3ff
        Add busy detection of LUKS mapping (#760080)

2018-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise additional GRUB2 core.img signatures (!5)
    
    Bootinfoscript v0.77 (2018-06-10) added additional signatures to
    recognise GRUB2 core.img by.  Commit:
    
        https://github.com/arvidjaar/bootinfoscript/commit/9a00c1a8877c9693ef908211f3dfd264c6172986
        Add more core.img diskboot signatures
    
    Specifically the new signatures are:
        5256be63 - trustedgrub2 1.4
        5256be56 - diskboot.S with mjg TPM patches (e.g. in openSUSE
                   Tumbleweed)
    
    Add those signatures into GParted.
    
    Closes !5 - Recognise additional GRUB2 core.img signatures

2018-06-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add CI job to test GParted on Ubuntu (!4)
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add CI job to build GParted on Ubuntu (!4)
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Parameterise CI config ready for also using a Ubuntu image (!4)
    
    Prepare the GitLab Continuous Integration configuration for also
    building and testing GParted on a Ubuntu image.  The definition of the
    image and before_script, which so far specify the CentOS Docker image
    and how to install the required RPM packages, need to move from being
    top level nodes to being defined per job.  Namely within jobs
    'centos_build' and 'centos_test'.
    
    To avoid duplicating various nodes within multiple jobs, YAML anchors
    (&LABEL) and references (*LABEL) are used.  They are defined in ignored
    jobs, job names starting with a dot (.).
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename CI jobs to reflect that they use a CentOS Docker image (!4)
    
    Ready for adding additional Continuous Integration jobs using different
    distribution Docker images.  Rename thus:
        build -> centos_build
        test  -> centos_test
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Exclude unit test which fails in Docker CI image (!4)
    
    Fragment of the tests/test-suite.log from the Docker CI image showing
    details of the unit test failure:
    
        Running main() from gtest_main.cc
        [==========] Running 26 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 26 tests from BlockSpecialTest
        ...
        [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
        test_BlockSpecial.cc:137: Failure
        Failed
        get_link_name(): Failed to open directory '/dev/disk/by-id'
        test_BlockSpecial.cc:168: Failure
        Failed
        follow_link_name(): Failed to resolve symbolic link ''
        test_BlockSpecial.cc:255: Failure
        Expected: (lnk.m_name.c_str()) != (bs.m_name.c_str()), actual: "" vs ""
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms)
        ...
        [==========] 26 tests from 1 test case ran. (1 ms total)
        [  PASSED  ] 25 tests.
        [  FAILED  ] 1 test, listed below:
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
    
         1 FAILED TEST
    
    So the code is trying to find a symbolic link to a block device to use
    in the test.  It is trying to read the directory /dev/disk/by-id to find
    a symbolic link, but the directory doesn't exist in the Docker CI image.
    
    The used directory was recently changed [1] to use one which existed on
    all distributions.  Docker images don't even have the /dev/disk
    directory.  Exclude just this specific test.
    
    [1] 7fe41480749c795dfb79daeba7b058cece2dfdd2
        Use /dev/disk/by-id/ to get device symlink in test_BlockSpecial
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Debug unit test failure in CI test job (!4)
    
    Recursively list all the files below /dev as part of the 'test' job as
    certain block device names are needed by the failing test_BlockSpecial
    unit test.
    
    The artifact captures all the files from the directory in which the CI
    script runs to build and test GParted.  It creates a ZIP file which can
    be downloaded after the job finishes, whether the job succeeds of fails.
    This is to capture logs from the failure of the test_BlockSpecial unit
    test.
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add CI testing job on CentOS (!4)
    
    Add GitLab Continuous Integration job named 'test' which runs the
    GParted unit tests and distcheck.  Note that the job starts from a fresh
    official CentOS Docker image so also has to rebuild GParted too.
    
    So far this job fails on unit test test_BlockSpecial.  Fragment of the
    CI job log:
    
        make  check-TESTS
        make[2]: Entering directory `/builds/mfleetwo/gparted/tests'
        make[3]: Entering directory `/builds/mfleetwo/gparted/tests'
        PASS: test_dummy
        FAIL: test_BlockSpecial
        PASS: test_PasswordRAMStore
        PASS: test_PipeCapture
        make[4]: Entering directory `/builds/mfleetwo/gparted/tests'
        make[4]: Nothing to be done for `all'.
        make[4]: Leaving directory `/builds/mfleetwo/gparted/tests'
        ============================================================================
        Testsuite summary for gparted 0.31.0-git
        ============================================================================
        # TOTAL: 4
        # PASS:  3
        # SKIP:  0
        # XFAIL: 0
        # FAIL:  1
        # XPASS: 0
        # ERROR: 0
        ============================================================================
        See tests/test-suite.log
        Please report to https://bugzilla.gnome.org/enter_bug.cgi?product=gparted
        ============================================================================
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create initial GitLab CI job which builds on CentOS (!4)
    
    Initial GitLab Continuous Integration configuration with a single job
    named 'build' which just confirms GParted can be built and installed on
    the latest official CentOS Docker image.
    
    Closes !4 - Add GitLab CI jobs to build and test GParted

2018-07-02  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2017-10-09  Jordi Mas <jmas@softcatala.org>

    Fixes to Catalan translation

2018-06-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove support for obsolete devkit-disks automount inhibitor
    
    Back in 2009 devicekit-disks package was renamed to udisks [1].  All
    supported distributions use udisks (or more recently udisks2).  None
    have the old devkit-disks command.  Therefore remove it from the GParted
    shell wrapper.
    
    [1] https://www.freedesktop.org/wiki/Software/DeviceKit-disks/
        "Note
        On December 1st 2009, DeviceKit-disks was renamed to udisks. This
        release is expected to appear in distributions released in the first
        half of 2010."

2018-06-22  Daniel Mustieles <daniel.mustieles.contractor@bbva.com>

    Updated Spanish translation

2018-06-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix LVM2 PV shrinking with lvm2 2.02.171 and later (#1)
    
    Shrinking an LVM2 Physical Volume on CentOS 7 with the latest
    lvm2 2.02.177 fails like this:
    
      Shrink /dev/sda9 from 1.00 GiB to 768.00 MiB
      * calibrate /dev/sda9
      * check file system on /dev/sda9 for errors and (if possib...(SUCCESS)
      * shrink file system                                         (ERROR)
        * lvm pvresize -v --setphysicalvolumesize 786432K '/dev/...(ERROR)
            0 physical volume(s) resized / 1 physical volume(s) not resized
    
            Wiping internal VG cache
            Wiping cache of LVM-capable devices
            /dev/sda9: Requested size 712.00 MiB is less than real size 1.00 GiB.  Proceed? [y/n]:[n]
            Physical Volume /dev/sda9 not resized.
    
    This upstream change to lvm2 [1] makes pvresize prompt for confirmation
    whenever the --setphysicalvolumesize option is used.  (The change was
    included in lvm2 2.02.171 and later, which is used in recent
    distributions.  The reporter found the issue on Ubuntu 18.04 LTS and I
    reproduced the issue on RHEL/CentOS 7.5).  The set size option has to be
    used when shrinking the PV before shrinking the partition therefore fix
    this issue by adding lvm common option --yes when using the set size
    option.
    
    [1] https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=cbc69f8c693edf0d1307c9447e2e66d07a04bfe9
        pvresize: Prompt when non-default size supplied.
    
    Closes #1 - Can't shrink LVM partition due to pvresize prompt

2018-05-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear previous LUKS unlock failure error before next attempt (#795617)
    
    After a failed LUKS unlock attempt the password entry dialog shows the
    error "Failed to open LUKS encryption".  Improve the user experience by
    clearing that error message at the start of the next attempt to avoid
    contradictory information with the main windows status of "Opening
    encryption on $PARTITION" whilst performing the next unlock attempt.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    After LUKS unlock failure select failed password (#795617)
    
    When the wrong LUKS password is entered and the [Unlock] button clicked,
    the wrong password is left in the entry box and focus remains on the
    [Unlocked] button.  Improve the user experience by selecting
    (highlighting) the whole of the wrong password ready for deletion or
    retyping and ensuring that the entry box always has focus.
    
    Just for completeness also programmatically make the password entry box
    have focus when the dialog box is created and first displayed, even
    though it gets this by default.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-06-19  Piotr Drąg <piotrdrag@gmail.com>

    Avoid unnecessary string change
    
    Restore whitespace to previous version,
    so no translations need to be updated.

2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increment GParted Manual version

2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update SystemRescueCd URL in the GParted Manual
    
    http://www.sysresccd.org redirects to http://www.system-rescue-cd.org.
    Update the GParted Manual to the new address.

2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update URLs in the remaining files to https://gparted.org (#796411)
    
    Update URLs in the README file, man page, metadata files and polkit
    action file.
    
    Bug 796411 - Enhancements request - URL links

2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update URLs in the app to https://gparted.org (#796411)
    
    We previously migrated our web site from http://gparted.org to
    https://gparted.org under:
        bug 786707 - gparted.org does not use HTTPS
    
    and updated URLs in the GParted Manual to match in commit:
        a8172ecb04afabd636e3ad3d6f6665af894516f1
        Convert Manual links to HTTPS where possible and update version
    
    Now update the URLs displayed in the GParted application too.
    
    Bug 796411 - Enhancements request - URL links

2018-05-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rework scope of fat16:: and ntfs::Change_UUID_Warning vectors
    
    The Change_UUID_Warning vectors were fat16 and ntfs class member
    variables, but are only ever accessed in the get_custom_text() method.
    Make them local variables in get_custom_text() instead.  Static so that
    references to them can be returned.

2018-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move the xfs_db -r flag to the start when reading XFS usage
    
    I completely missed that when reading XFS file system size and usage it
    was using the '-r' read-only flag to xfs_db because it was at the end of
    the string on the following line of code.  Move it to the start of the
    xfs_db command line, like it is when reading the file system label.

2018-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify from Gtk::Table to HBox in Partition Name dialog
    
    Same case as for FileSystem Label dialog before; the Partition Name
    dialog only has a single line of just 2 widgets.  Therefore switch to a
    simpler horizontal box widget to lay them out.

2018-05-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify from Gtk::Table to HBox in FileSystem Label dialog
    
    The FileSystem Label dialog only has a single line of just 2 widgets; a
    text label and entry box widget.  There is no need to use a multi-line
    capable table to hold this.  Switch to a simpler horizontal box widget.
    
    Note that this change is not related to porting to Gtk 3 and stopping
    using deprecated APIs because both HBox [1] and Table [2] are deprecated
    in Gtk 3.2 and Gtk 3.4 and replaced by Box with horizontal orientation
    and Grid respectively.
    
    [1] NEWS file from gtkmm 3.2, actually first released in gtkmm 3.1.6
        (unstable):
        https://git.gnome.org/browse/gtkmm/tree/NEWS?h=3.2.0#n91
            "Gtk:
            * All H* or V* specialized classes have been deprecated, to
              match the deprecations in the GTK+ C API. You should now
              set the orientation instead.
              This includes HBox, VBox, HButtonBox, VButtonBox, HPaned,
              VPaned, HScale, VScale,  HSeparator, VSeparator, HScrollbar
              and VScrollbar."
    
    [2] NEWS file from gtkmm 3.4, actually first released in gtkmm 3.3.2
        (unstable):
        https://git.gnome.org/browse/gtkmm/tree/NEWS?h=3.4.0#n162
            "* Deprecate Gtk::Table in favour of Gtk::Grid."

2018-01-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make get_custom_text() and get_generic_text() return by reference
    
    Replace return by value of const strings from
    FileSystem::get_custom_text() and get_generic_text() because that
    implies duplication of those strings.  Return a reference to constant
    strings instead.

2018-05-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise blkid identified BitLocker encrypted partitions (#795127)
    
    Future util-linux release after v2.32 will include this commit for blkid
    to recognise BitLocker encrypted partitions.  It is much better than
    GParted's inbuilt detection.
    
        https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=136f89ce5ed8cd159a1c56b5a775dada2363ecd3
        libblkid: add BitLocker detection
    
    Make GParted also recognise BitLocker encrypted partitions reported by
    blkid.
    
    Bug #795127 - Displayed Name is incorrect for bitlocker encrypted
                  partitions

2018-06-13  Curtis Gedak <gedakc@gmail.com>

    Add Mike Fleetwood as GParted maintainer

2018-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add logo.png for automatic GitLab/GitHub project avatar
    
    Generated from GParted SVG icon using:
        rsvg -w 256 -h 256 data/icons/hicolor_apps_scalable_gparted.svg logo.png

2018-05-21  Robert Ancell <robert.ancell@canonical.com>

    Fix null pointer check accidentally disabled (#796293)
    
    Compiling (with new enough g++) produces this warning:
    
        PasswordRAMStore.cc: In member function 'void GParted::PWStore::erase_all()':
        PasswordRAMStore.cc:177:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
          if ( protected_mem != NULL );
          ^~
        PasswordRAMStore.cc:193:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
           memset( protected_mem, '\0', ProtectedMemSize );
           ^~~~~~
    
    Looks like a stray semicolon...
    
    Bug 796293 - Fix null pointer check accidentally disabled

2018-05-06  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2018-05-02  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2018-04-30  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2018-04-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Change to insert or replace PasswordRAMStore::store() interface (#795617)
    
    Replace the insert() method (which reports an error when inserting a
    password with a key which already exists) with the store() method which
    replaces or inserts the password depending on whether the key already
    exists or not respectively.  There is also an optimisation that nothing
    is changed if the password to be replaced is the same as the one already
    stored.  The code in Win_GParted::open_encrypted_partition() is
    simplified now it doesn't have to implement this pattern of behaviour
    itself.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-03-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report LUKS unlock errors into the password dialog (#795617)
    
    Reports generic GParted error "Failed to open LUKS encryption" on any
    failure unlocking the partition.  Choosing not to display cryptsetup
    reported errors because those messages and their translations are not
    under GParted control.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-03-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop copying password into insecure memory when getting entry (#795617)
    
    The underlying C coded Gtk Entry widget is careful to zero memory after
    use, allowing the widget to be safely used for password entry [1].
    However the C++ method Gtk::Entry::get_text() just takes the underlying
    C string from the Gtk Entry widget and copies it when constructing a
    Glib::ustring for the return value [2].
    
    So directly use the Gtk/C API to get the C string instead.
    
    [1] https://git.gnome.org/browse/gtk+/tree/gtk/gtkentrybuffer.c?h=3.22.28#n92
        See function trash_area() which zeros memory and its use in
        gtk_entry_buffer_normal_insert_text(),
        gtk_entry_buffer_normal_delete_text() and
        gtk_entry_buffer_finalize().
    
    [2] https://git.gnome.org/browse/gtkmm/tree/gtk/src/entry.hg?h=3.22.2#n104
        _WRAP_METHOD(Glib::ustring get_text() const, gtk_entry_get_text)
    
        https://git.gnome.org/browse/glibmm/tree/docs/internal/using_gmmproc.txt?h=2.46.1#n53
        _WRAP_METHOD(Glib::ustring METHOD const, FUNC) is processed to:
            Glib::ustring METHOD() const
            {
                return Glib::convert_const_gchar_ptr_to_ustring(
                    FUNC(const_cast<GtkEntry*>(gobj())));
            }
    
        https://git.gnome.org/browse/glibmm/tree/glib/glibmm/utility.h?h=2.46.1#n82
            Glib::ustring convert_const_gchar_ptr_to_ustring(const char* str)
            {
                return (str) ? Glib::ustring(str) : Glib::ustring();
            }
    
        So Gtk::Entry::get_text() calls Glib::ustring() constructor which
        copies the C string to create the Glib::ustring object returned.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-02-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Keep password dialog open until successful unlock or cancellation (#795617)
    
    To keep password dialog open, just keep running it in a loop performing
    LUKS mapping unlock attempts with the entered passphrase until it
    succeeds or the dialog is cancelled or closed.  This is the same model
    that is already used for the File Support System dialog and how the
    [Rescan For Supported Actions] button is implemented.
    
    Also any error from attempting to open the LUKS mapping is no longer
    displayed in a separate error dialog or at all.  Will add some sort of
    error reporting into the password entry dialog in a following commit.
    
    Creates new method Win_GParted::open_encrypted_partition() which handles
    the non UI parts of attempting to open an encrypted partition.  Running
    "cryptsetup luksOpen" and updating the stored passphrase as needed.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-10-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add password entry dialog and attempt LUKS unlock once (#795617)
    
    Initial addition of a password entry dialog.  Looks like:
    
        +------------------------------------------------+
        |           LUKS Passphrase /dev/sdb1            |
        +------------------------------------------------+
        | Enter LUKS passphrase to open /dev/sdb1        |
        | Passphrase:    [                             ] |
        |                                                |
        |                          [ Cancel ] [ Unlock ] |
        +------------------------------------------------+
    
    A standard Gtk Dialog is used to accept the password once, with any
    errors displayed in a separate error dialog afterwards.  This is poor UI
    design.  A password dialog should remain open for all authentication
    attempts and only close when successful or the dialog is cancelled or
    closed.  This UI design issue will be improved in following commits.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-10-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add closing LUKS mappings (#795617)
    
    Implement Close Encryption partition menu item.
    
    The Open Encryption action is not yet implemented and instead reports an
    error detailing the open encryption command.  A dialog needs to be
    written to accept the password entry and pass it to the open encryption
    command.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2016-10-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unimplemented open/close encryption to the partition menu (#795617)
    
    Add new item to the partition menu to allow the user to open and close
    the LUKS mapping.  However for now the menu item is always disabled and
    there is no implementation behind it to actually open or close the LUKS
    mapping.  Fragment of the partition menu is now:
    
        ...
        Format to       >
        -----------------
        Open Encryption      <- New menu item
        Mount
        -----------------
        Name Partition
        ...
    
    Has to be two separate menu items to clearly represent to the user that
    LUKS mappings and file system mounting are two separate busy states.
    And also in the case of an open but unmounted file system to offer both
    actions; close encryption and mount file system.
    
    The text of the menu item automatically changes similarly to how it does
    for the Mount/Unmount, Swapon/Swapoff, Activate/Deactivate item
    depending on the state of the LUKS mapping.  For open LUKS mappings it
    will show "Close Encryption" and for all other cases (closed LUKS
    mapping or partition is not encrypted) "Open Encryption".  Again similar
    to how the default of "Mount" is shown for unallocated and unknown
    partitions.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2016-10-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename some Win_GParted members to *toggle_fs_busy* (#795617)
    
    In preparation for adding the ability to toggle the encryption busy
    state (open/close the encryption volume), rename existing members to
    reflect that they are related to changing the file system state.  (Swap
    and LVM2 Physical Volumes are handled as file systems by GParted).
    
    class Win_GParted renaming:
        MENU_TOGGLE_BUSY             -> MENU_TOGGLE_FS_BUSY
        allow_toggle_busy_state()    -> allow_toggle_fs_busy_state()
        toggle_busy_state()          -> toggle_fs_busy_state()
        check_toggle_busy_allowed()  -> check_toggle_fs_busy_allowed()
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using shell when reading jfs file system usage (#795617)
    
    Replace echoing "dm" into jfs_debugfs via a shell command to directly
    writing "dm" to the input of the jfs_debug command.  One less use of the
    shell.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add ability for small writes to stdin of child processes (#795617)
    
    As discussed in "LUKS password handling, threats and preventative
    measures" [1] GParted must be able to pass LUKS passphrases to
    cryptsetup via standard input to avoid having to write passwords to the
    file system and deal with additional security requirements.  Therefore
    add a way to write input into created child processes.  For small
    amounts of input, writing up to the pipe buffer capacity won't block
    [2].  This is 64K on versions of Linux in any currently supported
    distributions.
    
    [1] LUKS password handling, threats and preventative measures
        https://bugzilla.gnome.org/show_bug.cgi?id=627701#c56
    
        GParted must not become a password manage so it must never save
        LUKS passwords to disk across separate invocations of GParted.
        ...
    
        GParted should avoid writing a temporary file containing the LUKS
        password as it introduces extra complexity with trying to safely
        handle and erase file content.  Instead GParted must
        programmatically pass the LUKS password via standard input to the
        cryptsetup command.
    
    [2] pipe(7) manual page:
    
        Pipe capacity
            A pipe has a limited capacity.  If the pipe is full, then a
            write(2) will block or fail, depending on whether the O_NONBLOCK
            flag is set (see below).  ...
    
            In Linux versions before 2.6.11, the capacity of a pipe was the
            same as the system page size (e.g., 4096 bytes on i386).  Since
            Linux 2.6.11, the pipe capacity is 65536 bytes.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify obtaining address of password memory for unit tests (#795617)
    
    Use private access into the PasswordRAMStore class to directly obtain
    the address of the locked memory, rather than inferring it from the
    address of the first stored password.  This simplifies
    PasswordRAMStoreTest::SetUpTestCase() and avoids encoding most of the
    implementation knowledge that the first password will be stored at the
    start of the protected memory.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit testing of erasing all passwords (#795617)
    
    Test that all passwords are zeroed by PasswordRAMStore::erase_all(), the
    same method as used in the PasswordRAMStore destructor.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Split out erasing all passwords into a separate method (#795617)
    
    Move zeroing of the locked memory into separate PWStore::erase_all()
    private method.  Then use this in the PWStore destructor.  This is so
    that zeroing of all passwords can be unit tested independently of
    destructing the singleton PWStore object.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit tests for PasswordRAMStore module (#795617)
    
    As noted in comments:
    
    1) This is white box testing because it uses implementation knowledge
       to look through the API to the internals of the password store.
    
    2) It is not currently possible to test that the passwords are zeroed
       when the store is destroyed.
       However zeroing of memory is being tested when individual passwords
       are erased.
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2017-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add PasswordRAMStore module (#795617)
    
    Application level requirements for secure password management were set
    out in "LUKS password handling, threats and preventative measures" [1].
    
    The requirements are:
    1) Passwords are stored in RAM and are not allowed to be paged to swap.
       (However hibernating with GParted still running will write all of RAM
       to swap).
    2) Passwords are wiped from RAM when no longer needed.  When each
       password is no longer needed and when GParted closes.
    3) Passwords are referenced by unique key.  Recommend using LUKS UUIDs
       as the unique key.
       (Each LUKS password should only ever need to be entered once for each
       execution of GParted.  Therefore the passwords can't be stored in any
       of the existing data structures such as Partitions or LUKS_Info cache
       because all of these are cleared and reloaded on each device
       refresh).
    
    There seems to be two possible implementation methods: use an existing
    library to provide secure memory handling, or write our own.
    Libgcrypt [2] and libsodium [3] cryptographic libraries both provide
    secure memory handling.  (Secure memory is quite simple really, some
    virtual memory locked into RAM which is zeroed when no longer needed).
    Linking to an encryption library just to provide secure memory seems
    like using a sledge hammer to crack a nut.  Also because of requirement
    (3) above a module is needed to "own" the pointers to the passwords in
    the secure memory.  Managing the secure memory ourselves is probably no
    more code that that needed to interface to libgcrypt.  Therefore handle
    the secure memory ourselves.
    
    So far the module is only compiled.  It is not used anywhere in GParted.
    
    [1] LUKS password handling, threats and preventative measures
        https://bugzilla.gnome.org/show_bug.cgi?id=627701#c56
    
    [2] libgcrypt general purpose cryptographic library, as used in GNU
        Privacy Guard
        https://gnupg.org/related_software/libgcrypt/
    
    [3] libsodium crypto library
        https://download.libsodium.org/doc/
    
    Bug 795617 - Implement opening and closing of LUKS mappings

2018-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use /dev/disk/by-id/ to get device symlink in test_BlockSpecial
    
    Found that older but still supported distributions Debian 8 and
    Ubuntu 14.04 LTS don't have directory /dev/disk/by-path/.  This is used
    by the BlockSpecial unit test as a source of a symbolic link to a block
    special device.
    
    This causes the unit test to fail like this:
    
        $ cd tests
        $ ./test_BlockSpecial
        ...
        [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
        test_BlockSpecial.cc:137: Failure
        Failed
        get_link_name(): Failed to open directory '/dev/disk/by-path'
        test_BlockSpecial.cc:168: Failure
        Failed
        follow_link_name(): Failed to resolve symbolic link ''
        test_BlockSpecial.cc:255: Failure
        Expected: (lnk.m_name.c_str()) != (bs.m_name.c_str()), actual: "" vs ""
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms)
        ...
        [  FAILED  ] 1 test, listed below:
        [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
    
         1 FAILED TEST
    
    Which in turn causes make check and make distcheck to fail.
    
    Use directory /dev/disk/by-id/ instead as it always exists.

2018-03-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum required gtkmm to 2.16.0 (#794253)
    
    Increase the minimum required version of gtkmm to 2.16.0, thus allowing
    removal of HAVE_GTK_SHOW_URI autoconf definition and associated fallback
    code.
    
    Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
                 versions to glibmm 2.14.0 and gtkmm 2.16.0

2018-03-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum required gtkmm to 2.11.1 (#794253)
    
    Increase the minimum required version of gtkmm to 2.11.1, thus allowing
    removal of:
     *  HAVE_SET_DEFAULT_ICON_NAME autoconf definition and associated
        optional code.
     *  INSTALL_PIXMAPS_DIR automake conditional and associated make
        instructions.
    
    This is reversing these 3 commits, except for the higher minimum gtkmm
    version:
     1) a04210788399736ff7f097cb75650ebcbd0a4950
        Only use Gtk::Window::set_default_icon_name method when available (#695279)
     2) b09d6035cdca90debb145628b0c62a0213ee1225
        Add fallback method for specifying GParted icon (#695279)
     3) d6baac254677b7863af413a38f382e9a2e0252bd
        Only install fallback icon when required (#695279)
    
    Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
                 versions to glibmm 2.14.0 and gtkmm 2.16.0

2018-03-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Raise minimum required glibmm version to 2.14.0 (#794253)
    
    Increase the minimum required version of glibmm to 2.14.0, thus allowing
    removal of the HAVE_GLIB_REGEX autoconf definition and associated
    conditional code.  This is reversing commit, except for the new glibmm
    minimum check:
    
        456932846bfbfbd77bbf49165b9eb6c2b84e0da6
        Implement fallback if Glib::Regex class is missing (#695279)
    
    Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
                 versions to glibmm 2.14.0 and gtkmm 2.16.0

2018-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify ext2::get_filesystem_support() with regard ext4 support (#794253)
    
    E2fsprogs 1.41.0 (from 10 July 2008) first included ext4 support [1].
    As RHEL / CentOS 6 is now the oldest supported distribution, and that
    includes e2fsprogs 1.41.12 (from 22 August 2009) [2] all the e2fs
    programs support ext4 so it is no longer necessary to also depend on
    finding mkfs.ext4 before enabling each supported capability for ext4.
    This makes the ext2::get_filesystem_support() look like all the others
    in which each supported capability only depends on the presence of the
    relevant file system specific command.
    
    [1] Release notes for the e2fsprogs package / E2fsprogs 1.41.0
        http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.41.0
    
    [2] pkgs.org > CentOS 6 > CentOS x86_64 > e2fsprogs
        https://centos.pkgs.org/6/centos-x86_64/e2fsprogs-1.41.12-23.el6.x86_64.rpm.html
    
    Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
                 versions to glibmm 2.14.0 and gtkmm 2.16.0

2018-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove checks for e4fsprogs commands (#794253)
    
    PATCHSET OVERVIEW:
    
    As of 31 March 2017 RHEL / CentOS 5 reached the end of their support
    [1][2].  Therefore remove code which supports them.  This makes RHEL /
    CentOS 6 the oldest supported distribution.  So the minimum required
    versions of glibmm and gtkmm can be increased dropping some autoconf
    checks and conditional code supporting older versions of these
    libraries.  This will undo the bulk of these these previous bug fixes:
    
    * GParted 0.21.0
      Bug 738706 - Add support for ext4 on RHEL/CentOS 5.x
    
    * GParted 0.16.1
      Bug 695279 - Fix GParted doesn't compile on RHEL / CentOS 5.9
    
    [1] Red Hat Enterprise Linux Life Cycle
        https://access.redhat.com/support/policy/updates/errata#Life_Cycle_Dates
    
    [2] Subject: CentOS Linux 5 EOL
        https://lists.centos.org/pipermail/centos-announce/2017-April/022350.html
    
    THIS PATCH:
    
    Remove checks for e4fsprogs commands, removing support for ext4 on
    RHEL / CentOS 5.x.  This is reverting earlier commit:
        f672f68863d36972c5fb28d6592e47ca790708dd
        Check for e4fsprogs commands for ext4 support on RHEL/CentOS 5.x (#738706)
    
    Mkfs_cmd member variable is being kept as a convenience so that it is
    created once rather than on each use.  Also note that as it is a
    Glib::ustring type object, it's constructor will be called which will
    initialise it to the empty string so it doesn't need initialising to the
    empty string in the initialiser list of the ext2() constructor itself.
    
    Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
                 versions to glibmm 2.14.0 and gtkmm 2.16.0

2018-03-19  Andre Klapper <a9016009@gmx.de>

    Fix broken markup in Romanian user docs translation

2018-03-19  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2018-03-19  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2018-03-19  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.31.0   ==========

2018-03-19  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2018-03-19  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>

    Update Latvian translation

2018-03-18  Milo Casagrande <milo@ubuntu.com>

    Update Italian translation

2018-03-13  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2018-03-12  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2018-03-11  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2018-03-10  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2018-03-10  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2018-03-04  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2018-03-03  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2018-03-03  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2018-03-02  GNOME Translation Robot <gnome-sysadmin@gnome.org>

    Update Dutch translation

2018-02-24  Piotr Drąg <piotrdrag@gmail.com>

    Fix Spanish translation header

2018-02-22  Daniel Mustieles <daniel.mustieles.contractor@bbva.com>

    Updated Spanish translation

2018-02-17  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2018-02-09  Kukuh Syafaat <syafaatkukuh@gmail.com>

    Update Indonesian translation

2018-02-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove deprecated USE_GNOME2_MACROS from autogen.sh
    
    Use of USE_GNOME2_MACROS is deprecated in GNOME 3 and produced this
    warning:
    
        $ ./autogen.sh
        /usr/bin/gnome-autogen.sh
        ...
        ***Warning*** USE_GNOME2_MACROS is deprecated, you may remove it from autogen.sh
        ...
    
    It's use appears to have been removed first from GNOME 2.8 with this
    commit from 2004:
    
        https://git.gnome.org/browse/gnome-common/commit/?id=ea9e85851445efa0135c3f8d08c3d1ea53760d91
        delete some files that were unused after the reorganisation
    
    The oldest supported distribution is RHEL / CentOS 6 which is using
    gnome-common-2.28.0 from 2009.  Therefore unconditionally remove the
    USE_GNOME2_MACROS setting.
    
    Also confirmed that it makes no difference by running ./autogen.sh with
    and without USE_GNOME2_MACROS being set.  The produced GParted build
    trees were the same.  Therefore the release and executable can't be
    affected.

2018-01-30  Curtis Gedak <gedakc@gmail.com>

    Reduce dependency on scrollkeeper (#743318)
    
    Scrollkeeper and the associated OMF catalog files are used by the
    GNOME 2 version of yelp to display the GParted help manual.  To see how
    this works try the following command:
    
      yelp ghelp:gparted
    
    GNOME version 3 and higher yelp do not require scrollkeeper or the OMF
    catalog files to properly display the GParted help manual.  And in fact
    GNOME 3 deprecated the GNOME 2 method of building and installing GNOME
    help documents altogether; including use of GNOME_DOC_INIT autoconf
    macro, the gnome-doc-utils package and use of scrollkeeper.
    
      [GNOME 3] GNOME Goal: Port To New Documentation Infrastructure
      https://wiki.gnome.org/Initiatives/GnomeGoals/NewDocumentationInfrastructure
    
    Further, the next release of Debian, Debian 10 (Buster), will be
    removing the scrollkeeper / rarian package.
    
      rarian: Don't release with Buster
      https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=885657
    
    GParted is still a GNOME 2 app using GNOME 2 documentation build system
    using autoconf GNOME_DOC_INIT macro.
    
      [GNOME 2] Migrating your documentation to gnome-doc-utils
      https://wiki.gnome.org/Projects/GnomeDocUtils/MigrationHowTo
    
    This is needed to build GParted documentation on still supported GNOME 2
    distributions RHEL / CentOS 6.  So avoid requiring deprecated
    scrollkeeper on GNOME 3 by automatically disabling scrollkeeper database
    updates when the scrollkeeper-update command is not available.
    
      Executable          | Configure option used  | Use scrollkeeper
      scrollkeeper-update | on command line        | when building help
      exists?             |                        | for GParted?
      --------------------+------------------------+-------------------
      Yes                 | <none>                 | Yes
      Yes                 | --enable-scrollkeeper  | Yes
      Yes                 | --disable-scrollkeeper | No
                          |                        |
      No                  | <any>                  | No
    
    Note that because GParted is still using the GNOME 2 documentation build
    system it still builds and installs OMF files.  It is just that they are
    not required with GNOME 3 yelp and this commit automatically disables
    updating the scrollkeeper database when the scrollkeeper-update command
    is not available.
    
    Bug 743318 - configure script missing check for scrollkeeper dependency

2018-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add comment about needing to compute encryption overhead in activate_format()
    
    To explain why just using the size of the LUKS header won't always be
    correct.

2018-01-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move struct FS and FS_Limits into FileSystem.h
    
    Struct FS and struct FS_Limits are strongly related to the FileSystem
    class, both being return values from members and associated with storing
    file system attributes.  Move their definitions from Utils.h into
    FileSystem.h.

2018-01-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename enum FILESYSTEM to FSType
    
    There are too many different types of things named "filesystem" in the
    GParted code with the potential to cause confusion.  Namely:
    
        std::vector<FS> FILESYSTEMS
                                  Vector of file system capabilities.
    
        class FileSystem          Base class interfacing to file system
                                  specific executables for querying and
                                  modification.
    
        enum FILESYSTEM           Symbolic constants representing each file
                                  system type.
    
    Many recent written or re-written functions already used a variable
    named fstype.  Rename enum FILESYSTEM to enum FSType to clearly
    distinguish it from the other things with very similar names.  Only
    changing the name of the enumeration, not the name of variables of that
    type too because that is a lot more lines of code and those can be
    changed when the relevant code is re-written.

2018-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix cannot format error dialog which always reported the file system as encrypted
    
    Try to format an existing partition with a file system which doesn't
    fit.  The error dialog reporting the partition as too small or too large
    always claimed the file system was encrypted, whether it was or not.
    For example trying to format a 128 MiB partition as btrfs produces this
    error dialog:
    
        (-) Cannot format this file system to [Encrypted] btrfs
            A [Encrypted] btrfs file system requires
            a partition of at least 256.00 MiB.
                                                       [  OK  ]
    
    This commit:
        88136c96d7dd8576963c2e62eb2e9c85f5bff026
        Extend functions generating encrypted file system string (#774818)
    just completely missed handling the case for non-encrypted file systems
    in Utils::get_filesystem_string().  Add the missed code.

2018-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract common code into GParted_Core::get_filesystem_limits() (#787204)
    
    There are multiple repetitions of the same code getting a FileSystem
    object, checking for NULL and then calling the file system specific
    get_filesystem_limits().  Extract that into a common function.
    
    GParted_Core::get_filesystem_limits() can't use the file system from the
    passed Partition object because that is the current file system which
    will be different from the intended file system for new and format
    operations.  So would look up the wrong derived FileSystem specific
    object and call the wrong get_filesystem_limits().  Hence still needing
    fstype as a separate parameter to pass the intended file system.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set dynamic UDF file system size limits (#787204)
    
    UDF file system minimum and maximum size limits are defined in terms of
    numbers of file system blocks.  So when resizing an existing file system
    compute the byte size limits from the existing UDF file system's block
    size.  Alternatively when creating a new UDF file system use the
    device's sector size as the multiplier instead.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass Partition object to get_filesystem_limits() (#787204)
    
    As described in the previous commit, this is so that file system
    specific implementations can dynamically determine size limits based on
    Partition object attributes: such as the device sector size and the file
    system block size.  (Assuming set_used_sectors() sets
    partition.fs_block_size for the type of file system in question).
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder code in Win_GParted::activate_paste() (#787204)
    
    Background information about UDF is that when creating a file system
    it's block size must match the underlying device's sector size.  For
    optical media like CDs and DVDs that is 2K.  For hard drives that is
    usually 512 bytes or 4K.  However if a UDF file system has been copied
    from a device with a different sector size the UDF block size won't
    match the sector size.  Linux will happily mount such UDF file system.
    
    Therefore the derived udf::get_filesystem_limits() will need access to
    the file system block size when determining the size limits of an
    existing UDF file system being resized and use the device sector size
    when a new UDF file system is being created.  All this can be queried
    from an appropriate Partition object passed to get_filesystem_limits().
    All the calls to get_filesystem_limits() have an appropriate Partition
    object available already, except in Win_GParted::activate_reformat()
    when composing a format operation.  Or more correctly
    activate_reformat() constructs temp_ptn, a suitable Partition object,
    including with fs_block_size member defaulting to -1 indicating not a
    resize, but not until after the file system size limits had been checked
    and get_filesystem_limits() called.
    
    Therefore reorder the code in activate_paste() so that the file system
    size limits are checked after the wanted Partition object has been
    created.  No functional change with this commit.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove struct FS members .MIN & .MAX (#787204)
    
    All the code has been switched to call get_filesystem_limits() and use
    struct FS_Limits.  Remove struct FS members .MIN & .MAX.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use struct FS_Limits in Win_GParted::activate_format() (#787204)
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use struct FS_Limits in GParted_Core::create() (#787204)
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using struct FS_Limits inside Dialog_Partition_New (#787204)
    
    Change Dialog_Partition_New to use a fs_limits rather than struct FS
    and .MIN and .MAX.  No passing of struct FS_Limits required.  Just use
    the FILESYSTEMS vector of struct FS to provide the file system type and
    look up it's size limits each time the selection changes.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Query and pass struct FS_Limits into Dialog_Partition_Resize_Resize_Move (#787204)
    
    Refactor Win_GParted::activate_resize() to query the file system size
    limits using the new get_filesystem_limits() method and pass those
    limits into the dialog class as struct FS_Limits.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using struct FS_Limits inside Dialog_Partition_Resize_Move (#787204)
    
    Changes the internal code in Dialog_Partition_Resize_Move to use
    fs_limits instead of fs.MIN and fs.MAX.  The limits are still passed
    into the constructor via struct FS and it's members .MIN and .MAX but
    immediately used to assign to fs_limits.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Query and pass struct FS_Limits into Dialog_Partition_Copy (#787204)
    
    Refactor Win_GParted::activate_paste() to query the file system size
    limits using the new get_filesystem_limits() method and pass those
    limits into the the dialog class as struct FS_Limits.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using struct FS_Limits inside Dialog_Partition_Copy (#787204)
    
    Adds working copy fs_limits member into common Dialog_Base_Partition
    class.  Changes the internal code in Dialog_Partition_Copy class to use
    fs_limits instead of fs.MIN and fs.MAX.  The limits are still passed
    into the constructor via object of struct FS and it's members .MIN and
    .MAX but immediately used to assign to the fs_limits member.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Assign to duplicate FS_Limits (#787204)
    
    Duplicate the assignment of file system size limits into
    struct FS_Limits, matching the fixed values currently assigned to
    struct FS members .MIN and .MAX.
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create separate file system limits structure and getter method (#787204)
    
    PATCH SET OVERVIEW:
    
    Currently the supported actions of each file system and their size
    limits are stored in struct FS objects.  These are created by calling
    file system specific derived implementations of
    FileSystem::get_filesystem_support().  This happens when GParted is
    started or when a when a rescan for supported actions is performed.  The
    file system size limits are expressed as a fixed number of bytes.
    
    The maximum UDF file system size is specified in terms of file system
    block size units.  Also the file system block size must match the sector
    size of the underlying device.  Typically 2K for optical media and 512
    bytes or 4K for hard drives.
    
    Therefore GParted can't properly express the true UDF file system size
    limits because they depend on the block size of an existing UDF file
    system or the sector size of the device for new UDF file systems.  In
    fact other file systems such as EXT2/3/4 and XFS actually express their
    maximum file system size in terms of numbers of file system blocks but
    these tend to always be 4K and don't have to match the sector size of
    the underlying device, so fixed byte values tend to suffice.
    
    To update GParted for this, first separate file system size limits from
    struct FS into struct FS_Limits and provide new
    FileSystem::get_filesystem_limits() method to allow the limits to be
    queried independently of the calls to get_filesystem_support().
    Second, pass Partition objects and allow derived get_filesystem_limits()
    implementations.
    
    THIS PATCH:
    
    Just creates a separate structure storing fixed value file system
    minimum and maximum size limits along with getter method
    get_filesystem_limits().
    
    Bug 787204 - Minimum and maximum size of the UDF partition/disk

2018-01-28  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2018-01-08  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2018-01-06  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2018-01-04  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2018-01-02  Pali Rohár <pali.rohar@gmail.com>

    Use external tools udfinfo and udflabel for UDF file system (#792052)
    
    Those external tools were introduced in version 2.0 of udftools package
    and can show or change UDF label, UDF uuid and can provide information
    needed for counting total/free sectors.
    
    Bug 792052 - Add support for changing UDF label/uuid and show disk usage

2017-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename function and reword text for rollback of failed file system move
    
    To better reflect specifically that it is a failed (internally
    implemented) file system move which is being rolled back.

2017-12-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix rollback when growing a partition by more than twice fails (#791875)
    
    Attempt to grow a partition to more than twice it's size.  If committing
    that change to the partition fails in such a way that the new larger
    partition boundaries are not written to the disk drive then rolling back
    will fail with libparted error:
        Can't have overlapping partitions.
    
    Example operation details:
    
        Grow /dev/sdb8 from 1.00 GiB to 2.20 GiB
        * calibrate /dev/sdb8                                      (SUCCESS)
        * check file system on /dev/sdb8 for errors and (if poss...(SUCCESS)
        * grow partition from 1.00 GiB to 2.20 GiB                 (ERROR)
        * attempt to rollback failed change to the partition       (ERROR)
            original start: 7350272
            original end:   9447423
            original size:  2097152 (1.00 GiB)
          * libparted messages                                     (ERROR)
              Can't have overlapping partitions.
    
    What happened is that resize_move_partition() passed the new Partition
    object to resize_move_partition_implement() as the source partition for
    the rollback, and than called ped_disk_partition_by_sector() with a
    sector in the middle to identify the partition to be changed.  However
    the new partition was never written to the drive so in the middle was
    outside the old smaller partition.  Therefore libparted identified empty
    space after the partition, rather than the partition itself, as the
    intended target so when ped_disk_set_partition_geom() was called it
    reported error "Can't have overlapping partitions" because it thought
    another partition was being created with the same boundaries as the old
    partition, rather than the boundaries of the old partition being
    updated.
    
    The same error also occurs when rolling back a failed partition change
    as part of a move operation when the middle of the new partition falls
    outside of the boundaries of the old partition.
    
    Fix by making a temporary Partition object from the intersection of the
    old and new partition boundaries just to be used to identify the
    partition being changed to libparted.  As this is only rolling back a
    single step adjusting the partition boundaries as part of a resize
    and/or move operation, the old and new partition boundaries must
    intersect (and in fact that intersection contains the file system data).
    
    Bug 791875 - Rollback specific failed partition change steps

2017-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable failed partition change rollback for selected steps (#791875)
    
    The general rule is that:
    1) For a partition change step BEFORE a file system change step,
       rollback on failure;
    2) For a partition change step AFTER a file system change step, don't
       rollback on failure.
    
    Examining every case where resize_move_partition() is called and whether
    rollback on failure is wanted or not:
    
    * In resize_move()
        Resize / move extended partition.  No associated file system change.
      NO ROLLBACK
        Just to keep possibly applied operation.
    
    * #1 in move()
        Making all encompassing partition before moving file system.
      ROLLBACK
        To restore partition boundaries back to those of the file system.
    
    * #2 in move()
        Recreating original partition boundaries after file system move
        failed or was cancelled and has been rolled back.
      NO ROLLBACK
        To keep updated partition boundaries to match restored file system
        data.
    
    * #3 in move()
        Replacing all encompassing partition with final partition after
        successful file system move.
      NO ROLLBACK
        Keep new partition boundaries to match moved file system.
    
    * #1 in resize_encryption()
        Making the partition larger before growing closed LUKS encrypted
        data.
      ROLLBACK
        Restore partition boundaries back to those of the closed LUKS
        encrypted data.
    
    * #2 in resize_encryption()
        Shrinking the partition after open LUKS mapping has been shrunk, but
        before swap is re-created (smaller).
      NO ROLLBACK
        Difficult case because the partition shrink is in the middle of a
        LUKS shrink and a swap shrink (re-create).  If swap was actually
        shrunk like other types of file system, rather than re-created, then
        the operation sequence would be (1) shrink swap, (2) shrink LUKS
        encryption, (3) shrink partition.  In this hypothetical case and the
        actual case no rollback is preferred to try to keep the new
        partition boundaries match the shrunk open LUKS encryption mapping.
    
    * #3 in resize_encryption()
        Grow the partition before growing open LUKS mapping and re-creating
        swap larger.
      ROLLBACK
        Restore partition boundaries back to those of the smaller open LUKS
        encryption mapping.
    
    * #4 in resize_encryption()
        Shrink the partition after shrinking the file system and open LUKS
        encryption mapping.
      NO ROLLBACK
        Keep new smaller partition boundaries to match shrunk encrypted file
        system.
    
    * #5 in resize_encryption()
        Grow the partition before growing the open LUKS encryption mapping
        and file system.
      ROLLBACK
        Restore partition boundaries back to those of the not yet grown
        encrypted file system.
    
    * #1 in resize_plain()
        Resize partition before re-creating swap a different size.
      ROLLBACK
        Restore partition boundaries back to those of the not yet resized
        (re-created) swap space.
    
    * #2 in resize_plain()
        Shrink partition after shrinking the file system.
      NO ROLLBACK
        Keep new smaller partition boundaries to match shrunk file system.
    
    * #3 in resize_plain()
        Grow partition before growing the file system.
      ROLLBACK
        Restore partition boundaries back to those of the not yet grown
        file system.
    
    Removes the default value from the rollback_on_fail parameter so
    rollback or not has to be explicitly specified for every call of
    resize_move_partition().
    
    Bug 791875 - Rollback specific failed partition change steps

2017-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement rollback of failed partition resize/move steps (#791875)
    
    Even after implementing a fix for bug 790418 "Unable to inform the
    kernel of the change message may lead to corrupted partition table"
    GParted/libparted can still encounter errors informing the kernel of the
    new partition layout.  This has been seen with GParted on CentOS 7 with
    libparted 3.1.
    
    In such a case the partition has been successfully written to the disk
    but just informing the kernel failed.  This is a problem because when a
    partition is being moved in advance of a file system move step, failure
    to inform the kernel leaves the partition boundaries not matching the on
    disk limits of the file system.  For a move to the left this leaves the
    partition reported as unknown, apparently losing the user's data.
    
    For example start with a 512 MiB partition containing an XFS file
    system.  This is recognised by blkid and parted, hence also by GParted.
    
        # blkid /dev/sdb1
        /dev/sdb1: UUID=... TYPE="xfs" PARTUUID="37965980-01"
        # parted /dev/sdb unit s print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 16777216s
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
        Disk Flags:
    
        Number  Start     End       Size      Type     File system  Flags
         1      1048576s  2097151s  1048576s  primary  xfs
    
    Now move the partition 100 MiB to the left and have it fail to inform
    the kernel after the first partition change step.  Operation details:
    
        Move /dev/sdb1 to the left                                 (ERROR)
        * calibrate /dev/sdb1                                      (SUCCESS)
        * check file system on /dev/sdb1 for errors and (if poss...(SUCCESS)
        * grow partition from 512.00 MiB to 612.00 MiB             (ERROR)
            old start: 1048576
            old end: 2097151
            old size: 1048576 (512.00 MiB)
            requested start: 843776
            requested end: 2097151
            requested size: 1253376 (612.00 MiB)
          * libparted messages                                     (ERROR)
              Error informing the kernel about modifications to partition
              /dev/sdb1 -- Device or resource busy.  This means Linux won't
              know about any changes you made to /dev/sdb1 until you reboot
              -- so you shouldn't mount it or use it in any way before
              rebooting.  Failed to add partition 1 (resource temporarily
              unavailable)
    
    Now because the start of the partition is 100 MiB before the start of
    the file system, the file system is no longer recognised, and apparently
    the user's data has been lost.
    
        # blkid /dev/sdb1
        /dev/sdb1: PARTUUID="37965980-01"
        # parted /dev/sdb unit s print
        ...
        Number  Start    End       Size      Type     File system  Flags
         1      843776s  2097151s  1253376s  primary
    
    It doesn't matter why updating the partition failed, even if it was
    because of an error writing to the disk.  Rollback of the change to the
    partition should be attempted.  The worst case scenario is that rollback
    of the change fails, which is the equivalent to how the code worked
    before this patch set.
    
    However in other cases where the partition boundaries are being updated
    after a file system move or shrink step then the partition should be
    updated to match the new location of the file system itself.  And no
    rollback is wanted.  If the failure was only informing the kernel then
    in fact the partition has actually been updated on disk after all.
    
    So each partition resize/move step needs examining on a case by case
    basis to decide if rolling back the change to the partition is wanted or
    not.
    
    This patch only adds partition change rollback into
    resize_move_partition().  Rollback remains disabled until all cases are
    examined in the following patch.
    
    Bug 791875 - Rollback specific failed partition change steps

2017-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract common code into update_dmraid_entry() (#791875)
    
    Extract common code which updates a DMRaid device mapper entry into a
    sub-function.  This will also be needed when adding rollback of a
    partition change on failure.
    
    Bug 791875 - Rollback specific failed partition change steps

2017-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract code into resize_move_partition_implement() (#791875)
    
    Extract the code which actually implements the partition change into a
    sub-function ready for adding rollback of the change on failure.
    
    Bug 791875 - Rollback specific failed partition change steps

2017-12-27  Christian Kirbach <Christian.Kirbach@gmail.com>

    Update German translation

2017-12-20  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2017-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Match up OperationDetail creation and status setting for internal copy (#790842)
    
    This is not required, but it is more logical to have an OperationDetail
    object created and it's final status set in the same function rather
    than split between caller and callee.  So move creation of
    "copy %1 using a block size of %2" OperationDetail objects into
    GParted_Core::copy().
    
    Also introduces a couple of variables to remove some recomputation:
    benchmark_od & remaining_length.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-12-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set OperationDetail status last during internal copy benchmarking (#790842)
    
    Performing a copy or move operation which uses GParted's internal copy
    routine triggered the new GParted bug message.  Example operation
    details:
    
      Copy /dev/sdb8 to /dev/sdb (start at 4.51 GiB)               (SUCESSS)
      * calibrate /dev/sdb8                                        (SUCCESS)
      * check file system on /dev/sdb8 for errors and (if possib...(SUCCESS)
      * create empty partition                                     (SUCCESS)
      * set partition type on /dev/sdb9                            (SUCCESS)
      * copy file system from /dev/sdb8 to /dev/sdb9               (SUCCESS)
          using internal algorithm
          copy 1.00 GiB
        * finding optimal block size
          * copy 16.00 MiB using a block size of 1.00 MiB          (SUCCESS)
              16.00 MiB of 16.00 MiB copied
              GParted Bug: Adding more information to the result...(WARNING)
              0.797269 seconds
          * copy 16.00 MiB using a block size of 2.00 MiB          (SUCCESS)
          * copy 16.00 MiB using a block size of 4.00 MiB          (SUCCESS)
          * copy 16.00 MiB using a block size of 8.00 MiB          (SUCCESS)
          * copy 16.00 MiB using a block size of 16.00 MiB         (SUCCESS)
            optimal block size is 1.00 MiB
        * copy 944.00 MiB using a block size of 1.00 MiB           (SUCCESS)
    
    This is because when performing the initial benchmarking copies the time
    taken by each copy is added to the operation detail results in the
    calling GParted_Core::copy_blocks() after the final status was set in
    CopyBlocks::copy() with set_success_and_capture_errors().  Fix by
    setting the final status in the parent function after adding the time to
    the benchmark copies.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-12-10  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2017-12-08  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-12-05  Kukuh Syafaat <syafaatkukuh@gmail.com>

    Update Indonesian translation

2017-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make OperationDetail no_more_children bug message translatable (#790842)
    
    To be consistent with all previous bug messages being translatable.
    
    Also only mark the bug as a warning instead of an error because the bug
    doesn't cause any disk drive operations to fail.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-12-03  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2017-11-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wait for the kernel and udev to settle partitions for a second time (#790418)
    
    There is still another subtle issue.  When GParted_Core::commit() closes
    the device, the kernel initiates a second set of events which removes
    and re-adds the partitions again.  Need to wait for these to complete
    to prevent any following step failing with missing partition device
    nodes.
    
    Bug 790418 - "Unable to inform the kernel of the change" message may
                 lead to corrupted partition table

2017-11-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid libparted failing to inform the kernel about partition changes (#790418)
    
    Operations involving modifications to a partition are sometimes failing
    with a libparted error informing the kernel about modifications to
    partitions.  For example I encountered these errors when just creating a
    fourth partition on CentOS 7 in a VirtualBox VM.  Operation results:
    
        Create Primary Partition #1 (ext4, 4.73 GiB) on /dev/sdb   (ERROR)
        * create empty partition                                   (ERROR)
          * libparted messages                                     (ERROR)
            * Error informing the kernel about modification to partition
              /dev/sdb1 -- Device or resource busy.  This means Linux won't
              know about any changes you made to /dev/sdb1 until you reboot
              -- so you shouldn't mount it or use it in any way before
              rebooting.
            * Failed to add partition 1 (Resource temporarily unavailable)
    
    Those two libparted messages were presented in "Libparted Error" dialogs
    and [Cancel] was selected both times.
    
            Libparted Error
        (-) Error informing the kernel about modifications to partition
            /dev/sdb1 -- Device or resource busy.  This means Linux won't
            know about any changes you made to /dev/sdb1 until you reboot --
            so you shouldn't mount it or use it in any way before rebooting.
                                                       [ Cancel ] [ Ignore ]
    
            Libparted Error
        (-) Failed to add partition 1 (Resource temporarily unavailable)
                                                        [ Retry ] [ Cancel ]
    
    This is the edited output showing GParted print debugging, stracing of
    GParted and monitoring of udev events for this case.
    
        # ./gpartedbin /dev/sdb
        ======================
        libparted : 3.1
        ======================
        ...
         24.541604 +23.923435 create_partition()   start (new_partition, optdet, min_size=0)  new_partition.device_path="/dev/sdb"
         24.556101 +0.014497 create_partition()   type=PED_PARTITION_NORMAL
         24.556354 +0.000253 commit()             start (lp_disk)  lp_disk->dev->path="/dev/sdb"
        D: strace pid 18054.  Press [Return] to continue.
        ^Z
        [1]+  Stopped          ./gpartedbin /dev/sdb
    
        # udevadm monitor &
        [2] 18124
        monitor will print the received events for:
        UDEV - the event which udev sends out after rule processing
        KERNEL - the kernel uevent
    
        # strace -p 18054 -e open,ioctl,write,close &
        [3] 18129
        strace: Process 18054 attached
    
        # fg %1
        ./gpartedbin /dev/sdb
        128.175811 +103.619457 commit()             calling ped_disk_commit_to_dev(lp_disk) ...
        open("/dev/sdb", O_RDWR)                = 6
        ioctl(6, BLKFLSBUF)                     = 0
        write(6, "\372\270\0\20\216\320\274\0\260\270\0\0\216\330\216\300\373\276\0|\277\0\6\271\0\2\363\244\352!\6\0"..., 512) = 512
        ioctl(6, BLKFLSBUF)                     = 0
        close(6)
        128.181352 +0.005542 commit()             ped_disk_commit_to_dev(lp_disk) returned true
        128.181475 +0.000122 commit_to_os()       start (lp_disk, timeout=10)  lp_disk->dev->path="/dev/sdb"
        128.181527 +0.000052 commit_to_os()       calling ped_disk_commit_to_os(lp_disk) ...
        open("/dev/sdb", O_RDWR)                = 6
        ioctl(6, BLKFLSBUF)                     = 0
        open("/sys/block/sdb/ext_range", O_RDONLY) = 7
        close(7)                                = 0
    
        KERNEL[1158935.380543] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        KERNEL[1158935.380565] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        KERNEL[1158935.380578] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
    
        ioctl(6, BLKPG, {BLKPG_DEL_PARTITION, flags=0, datalen=152, data={start=0, length=0, pno=1, devname="", volname=""}}) = -1 ENXIO (No such device or address)
        ioctl(6, BLKPG, {BLKPG_DEL_PARTITION, flags=0, datalen=152, data={start=0, length=0, pno=2, devname="", volname=""}}) = -1 ENXIO (No such device or address)
        ioctl(6, BLKPG, {BLKPG_DEL_PARTITION, flags=0, datalen=152, data={start=0, length=0, pno=3, devname="", volname=""}}) = -1 ENXIO (No such device or address)
        ...
    
        KERNEL[1158935.380977] change   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb (block)
        KERNEL[1158935.381296] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        KERNEL[1158935.381367] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        KERNEL[1158935.381432] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        KERNEL[1158935.382992] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
    
        ioctl(6, BLKPG, {BLKPG_DEL_PARTITION, flags=0, datalen=152, data={start=0, length=0, pno=62, devname="", volname=""}}) = -1 ENXIO (No such device or address)
        ioctl(6, BLKPG, {BLKPG_DEL_PARTITION, flags=0, datalen=152, data={start=0, length=0, pno=63, devname="", volname=""}}) = -1 ENXIO (No such device or address)
        ioctl(6, BLKPG, {BLKPG_DEL_PARTITION, flags=0, datalen=152, data={start=0, length=0, pno=64, devname="", volname=""}}) = -1 ENXIO (No such device or address)
        ioctl(6, BLKPG, {BLKPG_ADD_PARTITION, flags=0, datalen=152, data={start=1048576, length=1073741824, pno=1, devname="/dev/sdb1", volname=""}}) = -1 EBUSY (Device or resource busy)
        write(2, "Error informing the kernel about"..., 251) = 251
        Error informing the kernel about modifications to partition
        /dev/sdb1 -- Device or resource busy.  This means Linux won't know
        about any changes you made to /dev/sdb1 until you reboot -- so you
        shouldn't mount it or use it in any way before rebooting.
    
        UDEV  [1158935.384641] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        UDEV  [1158935.390203] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        UDEV  [1158935.390243] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        UDEV  [1158935.462866] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        UDEV  [1158935.469207] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        UDEV  [1158935.471512] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        UDEV  [1158935.492173] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
    
        write(2, "Failed to add partition 1 (Resou"..., 60) = 60
        Failed to add partition 1 (Resource temporarily unavailable)
        close(6)
    
        KERNEL[1158955.730960] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        KERNEL[1158955.731095] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        KERNEL[1158955.731314] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        KERNEL[1158955.731397] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        KERNEL[1158955.731817] change   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb (block)
        KERNEL[1158955.731981] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        KERNEL[1158955.732166] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        KERNEL[1158955.732232] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        KERNEL[1158955.733955] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
    
        148.533154 +20.351627 commit_to_os()       ped_disk_commit_to_os(lp_disk) returned false
    
        UDEV  [1158955.738262] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        UDEV  [1158955.738460] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        UDEV  [1158955.738525] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
    
        148.537648 +0.004494 execute_command()    udevadm settle --timeout=10
    
        UDEV  [1158955.740864] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        UDEV  [1158955.760192] change   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb (block)
        UDEV  [1158955.801211] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        UDEV  [1158955.815262] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        UDEV  [1158955.815314] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        UDEV  [1158955.828134] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
    
        148.630797 +0.093149 execute_command()              exit status 0
        148.630882 +0.000085 commit_to_os()                 return false
        D: stop strace pid 18054.  Press [Return] to continue.
        ^Z
        [1]+  Stopped          ./gpartedbin /dev/sdb
    
        # kill %3
        strace: Process 18054 detached
        [3]-  Done             strace -p 18054 -e open,ioctl,write,close
    
        # kill %2
        [2]   Done             udevadm monitor
    
        # fg %1
        ./gpartedbin /dev/sdb
        173.700143 +25.069261 commit()             return false
        173.700470 +0.000327 create_partition()   return false
    
    What happens is that GParted calls ped_disk_commit_to_dev() which opens
    the device, writes the updated partition table and closes the device.
    When the device closes the kernel initiates asynchronous uevents and
    user space udev rules which remove and re-add all the partitions.  In
    the mean time GParted calls ped_disk_commit_to_os() to inform the kernel
    of the changes to the partition table.  This involves opening the
    device, using ioctl() to remove all possible partitions [1] and re-add
    needed partitions.  It finds partitions 1 to 3 already removed and
    accepts this along with all other non-existent partitions up to 64.
    When it tries to re-add partition 1 the ioctl() BLKPG_ADD_PARTITION call
    returns EBUSY.  Presumably because the partition is in use by udev which
    is in the process of running the user space rules associated with
    removing and re-adding it.  Then ped_disk_commit_to_os() closes the
    device which initiates a second round of asynchronous uevents and user
    space udev rules removing and re-adding all the partitions again.
    
    So in summary the kernel and udev are removing and re-adding the
    partitions exactly when libparted is trying to do exactly the same
    thing!
    
    [1] The algorithm in libparted 3.1 is to try to remove all possible
        partitions, 64 for this kernel, followed by re-adding the needed
        partitions.
    
        parted/libparted/arch/linux.c:_disk_sync_part_table()
        http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?h=v3.1#n2541
    
    Partprobe has had exactly the same issue with failing to inform the
    kernel about modifications to the partition table [2].  This was fixed
    in libparted post v3.2 release by this commit [3].
    
    [2] rhbz#1339705 - ceph-disk prepare: Error: partprobe /dev/vdb failed :
        Error: Error informing the kernel about modifications to partition
        /dev/vdb1 -- Device or resource busy.
    
        https://bugzilla.redhat.com/show_bug.cgi?id=1339705
    
    [3] partprobe: Open the device once for probing
    
        Previously there were 3 open/close pairs for the device, which may
        result in triggering extra udev actions. Instead, open it once at
        the start of process_dev and close it at the end.
    
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=cfafa4394998a11f871a0f8d172b13314f9062c2
    
    Implement the same fix as implemented for partprobe.  Hold a file handle
    open which libparted can use internally to avoid having to open() and
    close() the device itself twice, once for each of the calls
    ped_disk_commit_to_dev() and ped_disk_commit_to_os().  This avoids the
    first close() initiating the kernel and udev to remove and re-add the
    partitions exactly when ped_disk_commit_to_os() is trying to do the same
    thing.
    
    Bug 790418 - "Unable to inform the kernel of the change" message may
                 lead to corrupted partition table

2017-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove left behind #include "ProgressBar.h"
    
    The includes were missed being removed by this earlier refactoring
    commit which reduced direct access to the single ProgressBar object:
        b1313281bdaa40a7afc19687a14ac96c919f333c
        Simplify use of the progress bar via OperationDetail (#760709)

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename OperationDetailStatus STATUS_N_A to STATUS_WARNING
    
    Make the enumeration name match it's use as indicating a warning.  Also
    spell SUCCESS correctly.  Follow on to icon variable names too.

2017-11-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Identify libparted messages as either success or error (#790842)
    
    All libparted messages were reported as informational, even for a step
    which failed.  Instead identify libparted messages as either
    informational or errors depending on whether this step was successful
    or not respectively.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set the status last for the OperationDetails in mk/rm_temp_dir() (#790842)
    
    Resizing any unmounted file system which has to be mounted to be resized
    triggered the new GParted bug message.  However the operation did
    complete successfully.  Example operation details:
    
      Grow /dev/sdb8 from 1.00 GiB to 1.50 GiB                     (SUCCESS)
      * calibrate /dev/sdb
      * check file system on /dev/sdb8 for errors and (if possib...(SUCCESS)
      * grow partition from 1.00 GiB to 1.50 GiB                   (SUCCESS)
      * grow file system to fill the partition                     (SUCCESS)
        * mkdir -v /tmp/gparted-wvH0Ez                             (SUCCESS)
          * GParted Bug: Adding another child after no_more_chil...(ERROR)
          * Created directory /tmp/gparted-wvH0Ez
        * mount -v -t btrfs '/dev/sdb8' '/tmp/gparted-wvH0Ez'      (SUCCESS)
        * btrfs filesystem resize 1:max '/tmp/gparted-wvH0Ez'      (SUCCESS)
        * umount -v '/tmp/gparted-wvH0Ez'                          (SUCCESS)
        * rmdir -v /tmp/gparted-wvH0Ez                             (SUCCESS)
          * GParted Bug: Adding another child after no_more_chil...(ERROR)
          * Removed directory /tmp/gparted-wvH0Ez
    
    This is because set_success_and_capture_errors() was called first and
    the child details added after.  Reverse this ordering to fix.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Transition other code to callback error collection (#790842)
    
    Transition all remaining code, DMRaid and file system code, to use the
    new method of reporting success of a step and automatic error
    collection.  None of this code calls libparted so can't generate any
    libparted exceptions.  This is just for consistency so all code follows
    the same pattern using set_success_and_capture_errors().
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor ntfs resize code (#790842)
    
    Refactor nested if-then-else into a sequence of if fail return early.
    Makes the code simpler to understand and converts separate
    OperationDetail::set_status() calls for success or error into a single
    call using ternary conditional matching how it is or was done everywhere
    else.  This is also ready for status and error capture refactoring.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Transition code using libparted to callback error collection (#790842)
    
    Transition GParted block copying code and partition manipulation code,
    which uses libparted API, to the new method of reporting success of a
    step and automatic error collection.  Libparted exceptions are now
    reported with the step at which they occurred.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow child OperationDetails to emit error capture callback too (#790842)
    
    Just copies the callback into each newly added child detail.  As there
    are no more uses of set_success_and_capture_errors() yet, libparted
    errors are still only captured once at the top-level of each operation.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Capture libparted messages via callback at top-level only (#790842)
    
    Replace the explicit adding of libparted exception messages with a
    callback to do it instead, and fire the callback just once per operation
    by only changing the very top-level OperationDetail to use the new
    set_success_and_capture_errors().  Therefore this still produces exactly
    the same operation details with libparted messages at the end of each
    operation.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add mechanism to capture exception messages into an OperationDetail (#790842)
    
    All code implementing a step of an operation follows this pattern:
    
        od.add_child(OperationDetail("Step heading"));
        od.get_last_child().add_child(OperationDetail("More details"));
        // Do step
        success = ...
        od.get_last_child().set_status(success ? STATUS_SUCCESS
                                               : STATUS_ERROR);
    
    At this point any libparted messages reported via exceptions need to be
    added into the OperationDetail tree.  Also adding further children into
    the tree after collecting those errors needs to be prohibited (as much
    as the previous patch prohibited it).
    
    Add a new method which will replace the final set_status() call above
    like this which set the status, captures the errors and flags that
    further children shouldn't be added:
    
        ...
        od.get_last_child().set_success_and_capture_errors(status);
    
    It emits a callback to capture the errors to provide flexibility and so
    that the OperationDetail class doesn't have to get into the details of
    how GParted_Core saves libparted exception messages.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add mechanism to stop adding more child OperationDetails (#790842)
    
    Want functionality to prevent further child details being added to an
    OperationDetail.  This is so that the captured libparted error messages
    are always the last child in the list, and more details (at that point
    in the tree) can't be added.
    
    For example we want GParted to report like this:
    
      Move /dev/sdb3 to the right and shrink it from 1.14 GiB to...(SUCCESS)
      ...
      * shrink partition from 1.14 GiB to 1.00 GiB                 (SUCCESS)
        * old start: 4464640
          old end: 6856703
          old size: 2392064 (1.14 GiB)
        * new start: 4464640
          new end: 6561791
          new size: 2097152 (1.00 GiB)
        * libparted messages                                       (INFO)
          * DEBUG: GParted generated synthetic libparted excepti...
    
    and not like this:
    
      Move /dev/sdb3 to the right and shrink it from 1.14 GiB to...(SUCCESS)
      ...
      * shrink partition from 1.14 GiB to 1.00 GiB                 (SUCCESS)
        * old start: 4464640
          old end: 6856703
          old size: 2392064 (1.14 GiB)
        * libparted messages                                       (INFO)
          * DEBUG: GParted generated synthetic libparted excepti...
        * new start: 4464640
          new end: 6561791
          new size: 2097152 (1.00 GiB)
    
    So actually preventing the addition of more child details would stop
    users seeing information they should see.  So instead just report a bug
    message into the operation details.  This doesn't stop anything, but the
    bug message will be seen and allow us to fix GParted.
    
    So far nothing is enforced.  This patch just adds the mechanism to
    report a bug when a new child detail is added when prohibited.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also stop OperationDetail execution timer when setting status to N/A (#790842)
    
    PATCH SET SUMMARY:
    
    Libparted exception messages are reported into the operation details at
    the end of each separate operation.  For operations which involve
    multiple steps of partition manipulation there is no way to identify
    which exceptions occurred with which steps.
    
    Example resize/move operation in which multiple libparted exceptions
    were raised:
    
      Move /dev/sdb to the right and shrink it from 1.15 GiB to ...(ERROR)
      * calibrate /dev/sdb3                                        (SUCCESS)
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * shrink file system                                         (SUCCESS)
        * resize2fs -p 'dev/sdb3' 1048576K                         (SUCCESS)
      * shrink partition from 1.14 GiB to 1.00 GiB                 (SUCCESS)
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * grow partition from 1.00 GiB to 1.12 GiB                   (SUCCESS)
      * move file system to the right                              (SUCCESS)
        * e2image -ra -p -O 134217728 '/dev/sdb3'                  (SUCCESS)
      * shrink partition from 1.12 GiB to 1.00 GiB                 (ERROR)
      * libparted messages                                         (INFO)
        * DEBUG: GParted generated synthetic libparted exception...
        * Error informing the kernel about modifications to part...
        * Error informing the kernel about modifications to part...
        * DEBUG: GParted generated synthetic libparted exception...
        * DEBUG: GParted generated synthetic libparted exception...
    
    But there is no way to know which of the libparted steps: 1 calibrate or
    3 partition resize steps encountered which exceptions.
    
    Fix this by reporting the libparted messages into the operation details
    at the point at which they occur.  Then the above example would become:
    
      Move /dev/sdb to the right and shrink it from 1.15 GiB to ...(ERROR)
      * calibrate /dev/sdb3                                        (SUCCESS)
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * shrink file system                                         (SUCCESS)
        * resize2fs -p 'dev/sdb3' 1048576K                         (SUCCESS)
      * shrink partition from 1.14 GiB to 1.00 GiB                 (SUCCESS)
        * libparted messages                                       (INFO)
          * DEBUG: GParted generated synthetic libparted excepti...
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * grow partition from 1.00 GiB to 1.12 GiB                   (SUCCESS)
        * libparted messages                                       (INFO)
          * Error informing the kernel about modifications to pa...
          * Error informing the kernel about modifications to pa...
          * DEBUG: GParted generated synthetic libparted excepti...
      * move file system to the right                              (SUCCESS)
        * e2image -ra -p -O 134217728 '/dev/sdb3'                  (SUCCESS)
      * shrink partition from 1.12 GiB to 1.00 GiB                 (ERROR)
        * libparted messages                                       (ERROR)
          * DEBUG: GParted generated synthetic libparted excepti...
    
    THIS PATCH:
    
    Small change so that setting the status of an OperationDetail to N/A,
    warning, also stops the execution timer if it was running.  Matching
    what happens when the status is set to either success or error.
    
    This is to avoid having to set status twice, first time just to stop the
    timer, and second time to set it to the desired status when reporting a
    warning.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

2017-11-11  Ask Hjorth Larsen <asklarsen@gmail.com>

    Updated Danish translation

2017-11-04  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2017-11-01  Khaled Hosny <khaledhosny@eglug.org>

    Update Arabic translation

2017-10-15  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2017-10-11  Milo Casagrande <milo@ubuntu.com>

    Update Italian translation

2017-10-10  Curtis Gedak <gedakc@gmail.com>

    Remove extraneous blank line from NEWS file

2017-10-10  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2017-10-10  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.30.0   ==========

2017-10-08  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2017-10-08  Rūdolfs Mazurs <rudolfsm@src.gnome.org>

    Update Latvian translation

2017-10-07  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2017-10-07  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2017-10-04  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-10-04  Daniel Mustieles <daniel.mustieles@gmail.com>

    Update Spanish translation

2017-10-04  Daniel Mustieles <daniel.mustieles@gmail.com>

    Update Spanish translation

2017-10-04  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2017-10-03  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2017-10-03  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2017-09-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extract common code into new method get_lp_partition()

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Calibrate whole disk device partitions again (#788308)
    
    Fix up following switch from whole_device flag to TYPE_UNPARTITIONED.
    
    Also calibrate the type for whole disk device partitions.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore Information dialog display of whole disk devices (#788308)
    
    So they display as previously; as all grey in the graphic and with only
    the correct attributes shown.
    
    Fix up following switch from whole_device flag to TYPE_UNPARTITIONED.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disallow formatting of unrecognised whole disk devices again (#788308)
    
    Fix up following switch from whole_device flag to TYPE_UNPARTITIONED.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow Partition > New on unallocated whole disk devices again (#788308)
    
    Fix up following switch from whole_device flag to TYPE_UNPARTITIONED.
    
    Again use FS_UNALLOCATED to determine if a partition represents
    unallocated space and creation of a new partition should be allowed.
    This is so that trying to create a new partition on a whole disk device
    shows the "No partition table found on device /dev/DEV" warning again.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Select unallocated whole disk devices again (#788308)
    
    After the change from whole_device flag to TYPE_UNPARTITIONED,
    unallocated whole disk devices are no longer automatically selected
    because the partition type is no longer TYPE_UNALLOCATED.  Fix by
    checking for file system type FS_UNALLOCATED when identifying the
    largest unallocated space.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display unrecognised whole disk devices as all grey again (#788308)
    
    Following the switch from whole_device flag to TYPE_UNPARTITIONED,
    unallocated space can be found in two partition types:
        TYPE_UNALLOCATED
        TYPE_UNPARTITIONED  (only when filesystem == FS_UNALLOCATED)
    
    As the file system in both cases is FS_UNALLOCATED check for that when
    determining whether a partition is unallocated or not.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch from whole_device flag to TYPE_UNPARTITIONED (#788308)
    
    Remove whole_device flag and replace with new partition type
    TYPE_UNPARTITIONED.  Minimally adapt the remaining code to compile and
    run.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add TYPE_UNPARTITIONED partition type (#788308)
    
    Just adds the enumeration.  Using it will follow.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update partition related checks in set_valid_operations() (#788308)
    
    Update the partition can be named and partition flags can be managed
    checks from being disallowed on unallocated partition types, to being
    allowed on primary, logical and extended partition types.  This is in
    preparation for the introduction of new unallocated partition type.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add FILESYSTEM_MAP[FS_EXTENDED] entry
    
    Now when refreshing the devices, GParted_Core::read_label() calls
    GParted_Core::get_fs() with parameter FS_EXTENDED.
    
    Before this change, get_fs() would fail to find file system capabilities
    set for FS_EXTENDED and construct a not supported capabilities set and
    return that.
    
    Afterwards, find_supported_filesystems() creates a not supported
    capabilities set from the NULL pointer for FS_EXTENDED and adds this
    entry into the FILESYSTEMS vector.  Then get_fs() finds that not
    supported capabilities set for FS_EXTENDED in the FILESYSTEMS vector and
    returns that.
    
    This makes no functional difference.  It just seems right as other
    unsupported but used file system types have entries in FILESYSTEM_MAP.
    
    See this earlier commit doing the same thing:
        7870a92b8097b3b8067cc87b891451d5164e9b74
        Add FILESYSTEM_MAP[FS_UNALLOCATED] entry

2016-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove some unnecessary extended partition checks from GParted_Core (#788308)
    
    For example GParted_Core::read_label() is already called for empty
    partitions where .filesystem = FS_UNKNOWN.  In that case get_fs()
    returns an unsupported capability set with all capabilities set to
    FS::NONE.  The same would be true extended partitions where .filesystem
    = FS_EXTENDED too; get_fs() would return an unsupported capability set
    with all capabilities set to FS::NONE.
    
    Therefore the if not extended partition condition around the switch
    statements is not necessary in GParted_Core::read_label(), read_uuid(),
    label_filesystem() and change_uuid().  Remove.
    
    This also achieves removal of some uses of partition type enumerations
    in advance of the introduction of new partition type TYPE_UNPARTITIONED.
    
    Bug 788308 - Remove whole_device partition flag

2016-08-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add and use Partition::set_unpartitioned() method (#788308)
    
    PATCHSET OVERVIEW:
    
    When unpartitioned drive read-write support was added this commit added
    a whole_device flag:
       5098744f9aa958ba18d2a4657ea4345e275c885b
       Add whole_device flag to the partition object (#743181)
    
    Using a whole_device flags now seems not the correct way to model
    unpartitioned drives.  GParted models an uninitialised drive as:
        .path         = _("uninitialized")
        .type         = TYPE_UNALLOCATED
        .whole_device = true
        .filesystem   = FS_UNALLOCATED
    and a whole drive file system, using ext4 for example, as:
        .path         = "/dev/sdb"
        .type         = TYPE_PRIMARY
        .whole_device = true
        .filesystem   = FS_EXT4
    No partitioning changed yet the type of the partition in the model
    changed between TYPE_UNALLOCATED and TYPE_PRIMARY depending on whether
    the whole drive contains a recognised file system or not.
    
    The partition object describing a file system within a LUKS encryption
    mapping is another case of the model not matching reality.
        .path         = /dev/mapper/crypt_sdb1_crypt
        .type         = TYPE_PRIMARY
        .whole_device = true
        .filesystem   = FS_EXT4
    There is no partition table within the encryption mapping, the file
    system fills it, but GParted records it as a primary partition.
    
    Make TYPE_UNALLOCATED and TYPE_PRIMARY be reserved for representing
    unallocated space and primary partitions within a partitioned disk drive
    and introduce new TYPE_UNPARTITIONED for all cases of an unpartitioned
    whole disk drive.
    
    The GParted UI does differentiate between an unallocated whole disk
    device and anything else by requiring a partition table to be created
    first, even if that is just the loop partition table.  That
    determination can simply look for the partition object containing file
    system type FS_UNALLOCATED instead.
    
    THIS PATCH:
    
    Create set_unpartitioned() helper method to set a partition object to
    represent a whole disk drive and use everywhere such an object is
    modelled.  This matches what existing methods Set_Unallocated() and
    indeed Set() do for unallocated space and any type of partition
    respectively.
    
    For now the partition type is still set to either TYPE_UNALLOCATED or
    TYPE_PRIMARY so the rest of the code base remains the same.
    TYPE_UNPARTITIONED will be introduced later.
    
    Bug 788308 - Remove whole_device partition flag

2017-10-02  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-09-30  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2017-09-28  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2017-09-25  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2017-09-25  Curtis Gedak <gedakc@gmail.com>

    Convert Manual links to HTTPS where possible and update version

2017-09-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Describe Create New Partition / Partition name field in the Manual
    
    Missed when adding partition naming at creation time in enhancement:
        Bug 746214 - Partition naming enhancements
    starting with this commit:
        f804bc3244c1ee4509fe02b66990709566b69d08
        Allow partition naming on busy partitions (#746214)

2017-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass string literals directly to execute_command()
    
    There were a few cases of creating a local string variable from a
    literal and then passing the variable to execute_command() like this:
        Glib::ustring cmd = "whatever";
        Utils::execute_command( cmd, ... );
    
    This creates an unnecessary local variable.  Instead pass the string
    literal directly to Utils::execute_command() like this:
        Utils::execute_command( "whatever", ... );
    This also make the code a little bit more grep friendly.

2017-09-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop nicing external commands run by the DMRaid module (#788007)
    
    No other commands run by GParted are niced, so stop nicing commands run
    from the DMRaid module.
    
    I think nicing of possibly long running file system modification
    commands would have made virtually no difference because "nice -n 19"
    lowered the CPU priority, but such command would be I/O bound.
    
    History:
    
    Nicing of file system modification commands was added by this commit
    from 2006-08-21:
        82e6f6b132fd7960950a71a2af2db6ef93fde583
        added nice -n 19, so that all extensive filesystem operations will be
    
    Nicing of DMRaid operations was copied into the DMRaid module when it
    was added here in 2009-03-14:
        5865c92dc054dc87739e6a70b21f91825f214c9e
        Added new class for dmraid support
    
    Nicing was removed from file system modification commands with this
    commit from 2013-02-22:
        52a2a9b00a32996921ace055e71d0e09fb33c5fe
        Reduce threading (#685740)
    
    Bug 788007 - Remove minor bits of legacy from DMRaid module

2017-09-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove backward compatibility for dmraid without -P option (#788007)
    
    The -P option was first added to dmraid-1.0.0.rc15 released 2006-09-17
    [1].  dmraid-1.0.0.rc16 (a later release) was included in Debian 6 and
    Ubunbu 12.04 LTS.  dmraid-1.0.0.rc13 was included in RedHat/CentOS 5
    however the -P option was back ported into RedHat/CentOS 5.1.
    
    All of these distributions are so old as to be no longer supported and
    yet they provided the dmraid -P option.  Therefore backward
    compatibility for dmraid without the -P option is no longer required.
    So remove it.
    
    [1] old dmraid source code releases
        http://people.redhat.com/heinzm/sw/dmraid/src/old/
    
    Bug 788007 - Remove minor bits of legacy from DMRaid module

2017-09-25  Andre Klapper <a9016009@gmx.de>

    Fix typo in Romanian user docs translation

2017-09-25  Andre Klapper <a9016009@gmx.de>

    Fix typo in pt_BR user docs translation

2017-09-03  Pali Rohár <pali.rohar@gmail.com>

    Correctly quote and escape arguments passed to external commands (#787203)
    
    Trying to set a file system label to (including the double quotes):
        " --help "
    fails.  For example labelling an ext4 file system would try to run this
    command:
        # e2label /dev/sdb1 "" --help ""
        Usage: e2label device [newlabel]
        # echo $?
        1
    
    Alternatively trying to create a file system with a label of just a
    double quote also fails.  The Applying Pending Operations dialog waits
    forever and won't cancel or force cancel.  Have to use the window
    manager close window button to close the dialog.  Also GParted reports
    this error to the console:
        (gpartedbin:9648): glibmm-CRITICAL **:
        unhandled exception (type Glib::Error) in signal handler:
        domain: g-shell-error-quark
        code  : 0
        what  : Text ended before matching quote was found for ". (The text was 'mkfs.xfs -f -L """ /dev/sdb2')
    
    Command strings are parsed and split into argv array by function
    Glib::shell_parse_argv() which calls internal glib function
    tokenize_command_line() for shell tokenization.  It expects the command
    string to be properly quoted and escaped and after tokenization, calls
    g_shell_unquote() on every parsed argument.  So to prevent constructing
    incorrect commands, every non-static string needs to be properly quoted.
    
    GParted only puts labels and mount points into double quotes, but has
    not escaped special characters in those values itself.  This patch
    fixes all these problems by using Glib::shell_quote() on all variable
    values.  Labels, mount points, paths and all others too.
    
    Probably a better solution would be to use a new function which takes
    argv array instead of one string with all the, correctly quoted and
    escaped, arguments concatenated together.
    
    Bug 787203 - Correctly quote and escape arguments of external programs
                 passed to execute_command()

2017-09-03  Pali Rohár <pali.rohar@gmail.com>

    Correctly quote and escape command line argument passed to "sh -c" (#787203)
    
    Shell fragments must be properly quoted and escaped to prevent execution
    of unintended commands derived from user controllable data.  For
    example:
    
        $ printf '#!/bin/sh\necho test > out\n' > script.sh
        $ chmod +x script.sh
        $ truncate -s 20M 'jfs;script.sh'
        $ mkfs.jfs -q 'jfs;script.sh'
        $ ls -l out
        ls: cannot access out: No such file or directory
    
        $ sudo PATH=$PWD:$PATH /usr/local/bin/gparted 'jfs;script.sh'
        $ sudo PATH=$PWD:$PATH /usr/local/bin/gparted 'jfs;script.sh'
    
        $ ls -l out
        -rw-r--r-- 1 root root 5 Sep 12 23:11 out
        $ cat out
        test
    
    What is happening is that jfs::set_used_sectors() is using the device
    name 'jfs;script.sh' without quoting it and passing it to the shell to
    execute like this:
        sh -c 'echo dm | jfs_debugfs jfs;script.sh'
    which the shell duly executes as these two commands:
        echo dm | jfs_debugfs jfs
        script.sh
    
    This could be a security related issue as "sh -c" is able to execute
    arbitrary shell commands from the argument if if contains shell special
    characters.  Use Glib::shell_quote() [1] to quote and escape file names
    and whole commands passed to the shell.
    
    [1] Glib::shell_quote(const std::string & unquoted_string)
        https://developer.gnome.org/glibmm/stable/group__ShellUtils.html
        "Quotes a string so that the shell (/bin/sh) will interpret the
        quoted string to mean unquoted_string.
    
        If you pass a filename to the shell, for example, you should first
        quote it with this function."
    
    Bug 787203 - Correctly quote and escape arguments of external programs
                 passed to execute_command()

2017-09-02  Pali Rohár <pali.rohar@gmail.com>

    Make sure that FS_Info cache is loaded for all named paths (#787181)
    
    Naming a file system image file on the command line is shown by GParted
    as unknown.
    
        $ truncate -s 100M /tmp/fat.img
        $ mkfs.vfat /tmp/fat.img
        $ sudo ./gpartedbin /tmp/fat.img
    
    Currently the FS_Info cache is loaded for all devices reported by
    blkid (plus all whole disk devices identified from /proc/partitions even
    if blkid reports nothing).  However file system images named on the
    command line are not queried so GParted can't identify them.
    
    Fix by ensuring that the FS_Info blkid cache is loaded for all named
    devices, including named file system image files.
    
    Note that Mount_Info::load_cache() depends on the contents of the
    FS_Info cache to lookup UUID= and LABEL= device names from /etc/fstab.
    However only file systems in block devices can be mounted like this, and
    never file system image files, so the fact that the cache may be
    extended afterwards by FS_Info::load_cache_for_paths() does not matter.
    
    History
    
    Prior to version 0.22.0, when unpartitioned drive support was added,
    GParted could recognise some file system image files using loop
    partition handling in libparted.  However libparted before version 3.2
    reported the loop partition name as the whole disk device name appended
    with "1" so all the query commands were provided a non-existent name to
    use.  Therefore no file system usage or the label was displayed.
    
    Bug 787181 - Fix detection of file system images

2017-09-10  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2017-09-09  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2017-09-07  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-09-03  Pali Rohár <pali.rohar@gmail.com>

    Update list of prohibited fat label characters (#787202)
    
    Add double quote (") to the list of prohibited FAT label characters,
    previously missed [1][2].
    
    Also add single quote (') because mlabel encoded it in a way that both
    Windows and blkid don't understand, although mlabel can correctly decode
    it itself.
    
        # export MTOOLS_SKIP_CHECK=1
        # mlabel ::"MIKE'S" -i /dev/sdf1
        # mlabel -s :: -i /dev/sdf1
         Volume label is MIKE'S (abbr=MIKE_S~1???)
        # blkid -o value -s LABEL /dev/sdf1
        MIKE_S~1???
    
        (8-bit characters in the above output have been replaced with
        question marks (?) just to keep this commit message as 7-bit ASCII).
    
    Finally exclude ASCII control characters below SPACE (0x00 to 0x1F) as
    they also cause mlabel to ask a question and wait for input in the same
    way that prohibited characters do.  As discussed in the previous commit
    [1] the only way to stop GParted waiting forever is to manually kill
    mlabel with signal 9 (KILL).
    
        # mlabel ::"^A" -i /dev/sdf1
        Long file name "^A" contains illegal character(s).
        a)utorename A)utorename-all r)ename R)ename-all
        s)kip S)kip-all q)uit (aArRsSq):
    
    [1] 584137b32b4deed2c20022628baaee6b38570fa5
        Remove prohibited characters from FAT16/32 labels (#755608)
    
    [2] Microsoft TechNet: Label
        https://technet.microsoft.com/en-us/library/bb490925.aspx
    
    Bug 787202 - Update list of prohibited fat label characters

2017-09-05  Balázs Úr <urbalazs@gmail.com>

    Update Hungarian translation

2017-09-04  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2017-09-03  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2017-08-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Support /etc/fstab using Unicode labels as mount points (#786502)
    
    So far GParted is still loading the default non-reversible encoded
    labels from blkid in the initial loading of the FS_Info module cache.
    This encoded label is used to match LABEL=<label> when reading
    /etc/fstab, via the get_path_by_label() call, so works for ASCII only
    labels.  This prevents GParted enabling the "mount on >" partition menu
    item when non-ASCII labels are used.
    
    To fix this:
    1) Stop reading the labels the wrong way.
       Via the blkid command used to initially load the FS_Info module cache
       and is subject to default non-reversible encoding of non-printable
       ASCII bytes.
    2) Read all the labels the right way, but only when needed.
       Only when /etc/fstab file contains LABEL=<label> and
       get_path_by_label() is called, read all the labels from blkid without
       encoding them via run_blkid_update_cache_one_label().
    3) Return label from the cache.
       get_label() returns the cached label, loading it into the cache first
       if needed with run_blkid_update_cache_one_label().
    
    In the worst case scenario of having a LABEL=<label> in /etc/fstab blkid
    will be run for every partition containing a recognised file system to
    read the label.  On my desktop with 5 hard drives, 4  SWRaid arrays and
    31 recognised file systems running 'blkid -o value -s LABEL ...' 31
    times took 0.074 seconds of a total scan time of 9.072 seconds.  Less
    that 1% of the total scanning time.  When LABEL=<label> is not used in
    /etc/fstab individual blkid executions are only used to read labels for
    file systems where there is no file system specific tool available
    reducing the impact further.  Blkid itself caches the data in it's
    blkid.tab cache file rather than reading all file systems on each
    invocation.  Also the Linux file system cache will already contain the
    blkid executable file, needed libraries files and the blkid.tab cache
    file itself.  Hence why repeated execution of blkid is so fast.
    
    Further to the updated comment in set_partition_label_and_uuid().
    Matching LABEL=<label> from /etc/fstab uses the label obtained from
    blkid run in the C locale so this kind of assumes it returns the label
    correctly and it does for my limited testing on Unicode enabled
    desktops.  Just not sure if it would be true for all cases in all
    locales compared to the FS specific command run in the users default
    locale.
    
    Bug 786502 - Support reading Unicode labels when file system specific
                 tools aren't available

2017-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update FS_Info cache with Unicode safe labels read from blkid (#786502)
    
    Move the code which reads the Unicode label from FS_Info::get_label()
    into new function run_blkid_update_cache_one_label() which also replaces
    the non-reversibly encoded copy loaded during the initial cache load.
    
    This is mainly a bit of code refactoring ready for the following change.
    It deliberately keeps the initial loaded labels so that reading
    /etc/fstab and decoding LABEL=<label> to block special device names via
    FS_Info::get_path_by_label() continues to works, at least for ASCII only
    labels.
    
    Bug 786502 - Support reading Unicode labels when file system specific
                 tools aren't available

2017-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Support reading Unicode character labels via blkid (#786502)
    
    For file systems which don't provide a specific tool to read labels
    (exfat, f2fs, hfs, hfsplus, udf and ufs) or when the tools aren't
    installed for any other file system, reading labels falls back to using
    the blkid command.  Blkid encodes non-ASCII bytes in it's output [1].
    For example blkid reports a short Unicode label like this:
    
        # blkid /dev/sdb12
        /dev/sdb12: LABEL="M-PM-^ZM-PM->M-QM-^HM-PM-:M-PM-0" TYPE="hfsplus"
    
    This shows encoding using 'M-' for bytes above 127 and caret '^' for
    control characters.  Unfortunately neither 'M-' or '^' are encoded by
    blkid so it is impossible to distinguish between the original label
    containing either of these sequences or encoded non-printable bytes.
    See this Bugzilla's bug 786502 entry for more details.  Unfortunately
    this makes the default output format from blkid unsuitable for reading
    Unicode character labels.
    
    Instead instruct blkid to print values without encoding them using the
    '-o value' option.  This just produces a list of new line separated
    values without being able to identify which TYPE, UUID or LABEL belongs
    to which device.  So query just the label for each block device one at
    a time.  This method has the advantage of also working with all versions
    of blkid, from version 1.0.0 (12-Feb-2003) in CentOS 5 to the latest
    version 2.30.1 (20-Jul-2017) in Fedora 26.
    
        # blkid -o value -s LABEL /dev/sdb12 | hexdump -C
        00000000  d0 9a d0 be d1 88 d0 ba  d0 b0 0a           |...........|
        0000000b
    
    (Using hexdump -C just so that this commit message only contains ASCII
    characters).
    
    Therefore this commit changes FS_Info::get_label() to query blkid as
    shown above.  Note that GParted_Core::set_partition_label_and_uuid()
    only calls get_label() when there is no file system specific tool
    available (or the tool failed).
    
    The FS_Info cache still contains copies of the labels subject to blkid
    encoding, and that will be addressed in following commits.
    
    [1] blkid.c v2.30.1 safe_print()
        https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/tree/misc-utils/blkid.c?h=v2.30.1#n111
    
    Bug 786502 - Support reading Unicode labels when file system specific
                 tools aren't available

2017-09-02  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2017-08-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add .dirstamp to .gitignore
    
    Automake build of libraries creates .dirstamp files.  First added by
    this commit:
        81b104928b35d46faf200dc3265ac2254b6246c5
        Add building of Google Test libraries (#781978)
    
    Mark .dirstamp as to be ignored by GIT.

2017-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only when configured, grant root access to the X11 display (#776437)
    
    GParted fails to display when run under Wayland [1][2][3].  This is
    because by intentional design Wayland doesn't allow applications with
    root privileges access to the display [4].
    
    As an interim workaround make the gparted shell wrapper use xhost to
    grant root access to the X11 server if root doesn't already have access,
    but only when configured.  Granting root access must be explicitly
    enabled when building GParted like this:
        ./configure --enable-xhost-root
    It defaults to disabled.  When gpartedbin binary ends the shell wrapper
    revokes root access only if it granted such access.
    
    [1] GNOME Bug 776437 - GParted fails to run as root under Wayland
        https://bugzilla.gnome.org/show_bug.cgi?id=776437
    
    [2] Ubuntu Bug 1652282 - GParted does not work in GNOME on Wayland
        https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/1652282
    
    [3] Fedora Bug 1397103 - gparted not working under Wayland
        https://bugzilla.redhat.com/show_bug.cgi?id=1397103
    
    [4] Common Fedora 25 bugs
        Running graphical apps with root privileges (e.g. gparted) does not
        work on Wayland
        https://fedoraproject.org/wiki/Common_F25_bugs#wayland-root-apps
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary autoconf check for pkexec --disable-internal-agent option (#776437)
    
    The pkexec --disable-internal-agent option was introduced by this commit
    [1] in polkit 0.98 [2] which is before the minimum 0.102 version needed
    to run X11 apps.  Therefore the option will always be available.  Remove
    the unnecessary check.
    
    [1] https://cgit.freedesktop.org/polkit/commit/?id=f071d4561dfe8dd9cfd4e29fddec7bc82fd658aa
        pkexec: add --disable-internal-agent option
    
    [2] https://cgit.freedesktop.org/polkit/tree/NEWS?id=0.98#n25
        polkit NEWS entry for 0.98
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-08-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Check for pkexec >= 0.102 which supports execution of X11 apps (#776437)
    
    On CentOS 6 with polkit version 0.96 pkexec fails to execute gparted
    shell wrapper as root like this:
    
        $ env | grep DISPLAY
        DISPLAY=:0.0
        $ sh -x /usr/local/bin/gparted
        ...
        + pkexec /usr/local/bin/gparted
        (gpartedbin:8011): Gtk-WARNING **: cannot open display:
    
    This is because polkit didn't support setting the DISPLAY environment
    variable to allow execution of X11 applications until the introduction
    of the allow_gui annotation by this commit in polkit 0.102:
    
        https://cgit.freedesktop.org/polkit/commit/?id=7850d27017fed1834268a852350ae85381fbb110
        Bug 38769 - pkexec: Support running X11 apps
    
    Make configure only use pkexec version 0.102 or higher as the privilege
    escalation program.  Otherwise configure falls back to checking for the
    other privilege escalation programs as it did before.
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only install polkit action file when pkexec is used (#776437)
    
    Only install the GParted polkit action file when pkexec is being used as
    the root privilege escalation program.
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-06-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add required polkit action file (#776437)
    
    An action file is always needed with polkit to describe the privileged
    actions that are available to the subject (client program).  For GParted
    the only available action is to run the gparted shell script as root.
    
    Note that the polkit action file will be installed into location
    $(prefix)/share/polkit-1/actions.  This is required by the GNU Coding
    Standards [1] and to prevent 'make distcheck' from failing [2].  However
    polkit only uses /usr/share/polkit-1/actions for it's action files [3].
    This dilemma was discussed in this Bugzilla bug 776437 and on the
    general Automake discussion email list [4].  The solution is to simply
    document in the README file that a manual additional installation step
    may be required.
    
    The action file is marked as translatable with the underscore (_) of the
    _description and _message tags identifying the string to be translated.
    
    Use of INTLTOOL_POLICY_RULE in Makefile.am to merge translations into
    the polkit action file necessitates increasing the minimum version of
    intltool to 0.36.0 where it was first introduced in intltool.m4.  This
    will prevent GParted building on RedHat/CentOS 5 which only has intltool
    0.35.0.  But that doesn't matter because RedHat/CentOS 5 reached end of
    life on 31st March 2017.
    
    [1] GNU Coding Standards, 7.2.5 Variables for Installation Directories
        https://www.gnu.org/prep/standards/standards.html#Directory-Variables
    
    [2] Automake Manual, 27.10 Installing to Hard-Coded Locations
        https://www.gnu.org/software/automake/manual/automake.html#Hard_002dCoded-Install-Paths
        "My package needs to populate the installation directory of another
        package at install-time.  I can easily compute that installation
        directory in configure, but if I install files therein,
        'make distcheck' fails.  How else should I do?"
    
    [3] polkit(8), Declaring Actions
        https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html#polkit-declaring-actions
    
        "A mechanism need to declare a set of actions in order to use
        polkit.  Actions correspond to operations that clients can request
        the mechanism to carry out and are defined in XML files that the
        mechanism installs into the /usr/share/polkit-1/actions directory."
    
    [4] Not installing to hard-coded locations vs polkit's fixed location
        http://lists.gnu.org/archive/html/automake/2017-08/msg00015.html
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-06-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add detection of pkexec root privilege escalation program (#776437)
    
    Many of the distributions (confirmed for Arch Linux, Debian, Fedora,
    OpenSUSE, RedHat/CentOS and Ubuntu but likely many others too) are now
    using polkit as the mechanism to authorise privileged actions, including
    using it to authorise GParted to run as root in their packages of
    GParted.  Therefore make the GParted configure script check for the
    pkexec command.
    
    Use pkexec with the --disable-internal-agent option when available,
    preventing pkexec using it's own textual authentication agent.  When
    running GParted from a desktop icon or menu there is no terminal with
    which to interact with the textual authentication agent to it can't be
    used.  The desktop's graphical agent must be running.  This matches how
    some distributions already use polkit in their own packages of GParted.
    
    Required actions file will be added in the next commit.
    
        polkit(8)
        https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
    
        pkexec(1)
        https://www.freedesktop.org/software/polkit/docs/latest/pkexec.1.html
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Now install gparted wrapper script into $prefix/bin (#776437)
    
    Now that the gparted script is intended to be run by ordinary users, as
    well as root, install it into directory $prefix/bin rather than
    $prefix/sbin.
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move root privilege escalation into gparted wrapper script (#776437)
    
    Move calling of the privilege escalation program which allows a normal
    user to run GParted as root from the desktop file into the gparted
    wrapper script.  This is in preparation for further changes needed to
    grant root access to the X11 display under Wayland.
    
    Don't introduce yet another script so that there aren't two different
    names to run GParted by for normal users and root.  Using the same
    gparted name but placing two different scripts at /usr/bin/gparted and
    /usr/sbin/gparted is not possible because on Arch Linux /usr/sbin is a
    symbolic link to /usr/bin.
    
        Frequently asked questions, Does Arch follow the FHS?
        https://wiki.archlinux.org/index.php/Frequently_asked_questions#Does_Arch_follow_the_FHS.3F
    
        "Arch Linux follows the file system hierarchy for operating systems
        using the systemd service manager.  See file-hierarchy(7) for an
        explanation of each directory along with their designations.  In
        particular, /bin, /sbin, and /usr/sbin are symbolic links to
        /usr/bin, and /lib (and /lib64 if applicable) are symbolic links to
        /usr/lib".
    
    Bug 776437 - GParted fails to run as root under Wayland

2017-09-01  Jiri Grönroos <jiri.gronroos@iki.fi>

    Update Finnish translation

2017-08-20  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-08-17  Balázs Meskó <meskobalazs@fedoraproject.org>

    Update Hungarian translation

2017-08-13  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2017-08-11  Andre Klapper <a9016009@gmx.de>

    zh_CN: Fix keyword list which MUST end with a non-localized semicolon

2017-08-11  Andre Klapper <a9016009@gmx.de>

    zh_TW: Fix keyword list which MUST end with a non-localized semicolon

2017-08-11  Andre Klapper <a9016009@gmx.de>

    en_GB: Fix keyword list which MUST end with a semicolon

2017-08-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only execute mkudffs during detection when it is known to exist (#786050)
    
    When udftools are not installed and the mkudffs program isn't found
    GParted would report this error during startup:
    
        # ./gpartedbin
        ======================
        libparted : 3.1
        ======================
        Failed to execute child process "mkudffs" (No such file or directory)
    
    Only run mkudffs to check for an old version when the program is found.
    
    Bug 786050 - GParted reports failed to execute child process "mkudffs"
                 when it is not installed

2017-08-09  hanniedu <hannie@ubuntu-nl.org>

    Updated Dutch translation

2017-08-08  Kukuh Syafaat <syafaatkukuh@gmail.com>

    Update Indonesian translation

2017-08-08  Jordi Mas <jmas@softcatala.org>

    Update Catalan translation

2017-08-07  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2017-08-07  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.29.0   ==========

2017-08-06  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2017-08-06  Daniel Șerbănescu <daniel@serbanescu.dk>

    Update Romanian translation

2017-08-03  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-08-03  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2017-08-03  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-08-02  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2017-08-01  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-08-01  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-08-01  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2017-08-01  Daniel Mustieles <daniel.mustieles@gmail.com>

    Update Spanish translation

2017-07-31  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2017-07-31  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2017-07-30  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2017-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor UDF label manipulation code (#784533)
    
    Make especially the Volume Identifier length limit code simpler to
    understand and therefore easier to maintain.
    
    Bug 784533 - Add support for UDF file system

2017-07-23  Pali Rohár <pali.rohar@gmail.com>

    Add support for long UDF labels and check for old versions of mkudffs (#784533)
    
    UDF label is stored in the Logical Volume Identifier which has space for
    either 126 Latin1 or 63 UCS-2 characters.  For compatibility reasons
    with older versions of blkid, the possibly truncated UDF label is also
    stored in the Volume Identifier which only has space for 30 Latin1 or 15
    UCS-2 characters.
    
    Because versions of mkudffs prior to 1.1 damage the label if it contains
    non-ASCII characters, make sure GParted does not call such versions of
    mkudffs with a non-ASCII character label.
    
    Bug 784533 - Add support for UDF file system

2017-07-25  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-07-24  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix make distcheck build failing with missing *.Po files (#785308)
    
    Make distcheck is failing like:
        <snip>
        Make distcheck
        Making distclean in tests
        make[2]: Entering directory
        '/home/gedakc/workspace/gparted/gparted-0.29.0-beta1/_build/sub/tests'
        Makefile:658: ../src/.deps/BlockSpecial.Po: No such file or directory
        Makefile:659: ../src/.deps/PipeCapture.Po: No such file or directory
        make[2]: *** No rule to make target '../src/.deps/PipeCapture.Po'.  Stop.
        make[2]: Leaving directory
        '/home/gedakc/workspace/gparted/gparted-0.29.0-beta1/_build/sub/tests'
        Makefile:596: recipe for target 'distclean-recursive' failed
        make[1]: *** [distclean-recursive] Error 1
        make[1]: Leaving directory
        '/home/gedakc/workspace/gparted/gparted-0.29.0-beta1/_build/sub'
        Makefile:805: recipe for target 'distcheck' failed
        make: *** [distcheck] Error 1
    
    Make distcheck started failing like this with this commit:
        f31808989ab7562ad411911c8b2dc16958708be8
        Silence subdir-objects warning from automake 1.14 (#781978)
    
    However, also need to be referring to source files from a sibling
    directory like this from tests/Makefile.am:
        test_BlockSpecial_SOURCES = test_BlockSpecial.cc ../src/BlockSpecial.cc
                                                         ^^^^^^^
    First introduced by this commit:
        c37be28148ec6c6b2b9be4cf097f4d20513c9a14
        Add unit tests for BlockSpecial constructors and internal caching (#781978)
    
    This failure, if not exactly common, has been seen a number of times
    before.  Using this hint from a GNU Automake forum post:
    
        converting to subdir-objects
        http://gnu-automake.7480.n7.nabble.com/converting-to-subdir-objects-td21724.html
    
        "I had the same issue and wouldn't care unless Automake 1.15 started
        to warn about "source file in a subdirectory". In my case 'bar.o' is
        also built from 'foo/Makefile' so I decided to skip using 'bar.c' as
        SOURCE and instead link in 'foo/bar.o'.
    
        http://dev.thep.lu.se/svndigest/changeset/1581
    
        Cheers,
        Peter
        "
    
    Fix by avoiding referring to source files from a sibling directory when
    building the unit test programs, instead refer to object files instead.
    
    Note that the automake subdir-objects option is still required to
    silence the warning because of the use of source files in subdirectories
    by lib/gtest/Makefile.am.
    
    Bug 785308 - make distcheck fails with *.Po: No such file or directory

2017-07-16  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2017-07-11  Kukuh Syafaat <syafaatkukuh@gmail.com>

    Update Indonesian translation

2017-07-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update AUTHORS file and Help > About > Credits
    
    Provide credit for patch by Pali Rohár.

2017-07-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Minor update of colour for exFAT
    
    Colour for exFAT was a Sea Green.  This is close to Accent Green Dark
    from the GNOME colour palette.  Use that instead.

2017-07-05  Pali Rohár <pali.rohar@gmail.com>

    Add support for UDF file system (#784533)
    
    Add support for detecting UDF file systems and formatting hard disks
    with revision 2.01 UDF file systems using udftools.  Formatting optical
    disks or any other media types is not supported yet.  Changing label or
    UUID after formatting is not supported as the tools do not yet exist.
    
    Bug 784533 - Add support for UDF file system

2017-07-05  Pali Rohár <pali.rohar@gmail.com>

    Fix setting empty label when creating FAT16/32 file systems (#784564)
    
    A FAT file system label in the partition boot sector should be set to
    "NO NAME    " when the label is empty [1][2].  mkdosfs/mkfs.fat always
    sets this to the label specified on the command line, even when the
    label is blank [3].  Fix by not specifying the label when it is blank.
    
    [1] The FAT File System, BIOS Parameter Block and Extended BIOS
        Parameter Block
        https://social.technet.microsoft.com/wiki/contents/articles/6771.the-fat-file-system.aspx#BPB_and_EBPB
    [2] FAT16 File System, Volume Label
        http://www.maverick-os.dk/FileSystemFormats/FAT16_FileSystem.html#VolumeLabel
    [3] mkfs.fat -n "" generates file system with invalid label
        https://github.com/dosfstools/dosfstools/issues/54
    
    Bug 784564 - GParted calls mkfs.fat incorrectly when user does not specify label

2017-07-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Detect btrfstune change UUID capability again (#784467)
    
    Btrfstune changed it's command line help output from being written on
    stderr to being written on stdout in the following commit first included
    in btrfs-progs 4.7.2 released 05-Sep-2016.  This breaks GParted
    detection of the change UUID capability.  Found on the very latest
    distributions: up to date Arch Linux and Fedora 26 Beta.  Fix this.
    
        https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=57d1cbd867311d99a2ae5e3cdcffd04
        btrfs-progs: print help test to stdout
    
    Bug 784467 - No longer detecting btrfs change UUID capability

2017-06-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Silence subdir-objects warning from automake 1.14 (#781978)
    
    Configuring GParted on a machine with automake >= 1.14 produces this
    warning:
    
        $ ./autogen.sh
        ...
        lib/gtest/Makefile.am:58: warning: source file 'src/gtest-all.cc' is in a subdirectory,
        lib/gtest/Makefile.am:58: but option 'subdir-objects' is disabled
        automake: warning: possible forward-incompatibility.
        automake: At least a source file is in a subdirectory, but the 'subdir-objects'
        automake: automake option hasn't been enabled.  For now, the corresponding output
        automake: object file(s) will be placed in the top-level directory.  However,
        automake: this behaviour will change in future Automake versions: they will
        automake: unconditionally cause object files to be placed in the same subdirectory
        automake: of the corresponding sources.
        automake: You are advised to start using 'subdir-objects' option throughout your
        automake: project, to avoid future incompatibilities.
        lib/gtest/Makefile.am:60: warning: source file 'src/gtest_main.cc' is in a subdirectory,
        lib/gtest/Makefile.am:60: but option 'subdir-objects' is disabled
        lib/gtest/Makefile.am: installing './depcomp'
        tests/Makefile.am:22: warning: source file '../src/BlockSpecial.cc' is in a subdirectory,
        tests/Makefile.am:22: but option 'subdir-objects' is disabled
        tests/Makefile.am:23: warning: source file '../src/PipeCapture.cc' is in a subdirectory,
        tests/Makefile.am:23: but option 'subdir-objects' is disabled
        ...
    
    From the automake 1.14 NEWS file:
        http://git.savannah.gnu.org/cgit/automake.git/tree/NEWS?h=v1.14#n125
    
        "The next major Automake version (2.0) will unconditionally activate
        the 'subdir-objects' option.  In order to smooth out the transition,
        we now give a warning (in the category 'unsupported') whenever a
        source file is present in a subdirectory but the 'subdir-object' is
        not enabled.  For example, the following usage will trigger such a
        warning:
    
            bin_PROGRAMS = sub/foo
            sub_foo_SOURCES = sub/main.c sub/bar.c
        "
    
    Set the subdir-objects automake option, silencing the warning.
    
    Bug 781978 - Add Google Test C++ test framework

2017-06-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure internal detection requires second magic when needed (#783997)
    
    Internal file system detection is broken for detection of LVM2 PVs
    because it reports finding LVM2 PV even when only the first magic is
    found.  Prepare a partition like this:
        # lvm pvcreate /dev/sdb1
        # hexdump -C /dev/sdb1 > hexdump-1.txt
    
    Clear the second magic:
        # python
        f = open("/dev/sdb1","w")
        f.seek(0x218)
        f.write("\x00"*4)
        f.close()
        quit()
    
        # hexdump -C /dev/sdb1 > hexdump-2.txt
        # diff -u hexdump-[12].txt
         00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........|
        -00000210  58 69 83 e1 20 00 00 00  4c 56 4d 32 20 30 30 31  |Xi.. ...LVM2 001|
        +00000210  58 69 83 e1 20 00 00 00  00 00 00 00 20 30 30 31  |Xi.. ....... 001|
                                            ^^ ^^ ^^ ^^                       ^^^^
         00000220  52 4b 31 73 50 77 49 66  6a 72 55 4c 6a 4d 30 58  |RK1sPwIfjrULjM0X|
    
    GParted still detects this as an LVM2 PV even though lvm and blkid do
    not.
    
    Correct logic error and only perform memcmp() with the second magic when
    the second signature is non-NULL.
    
    Bug 783997 - GParted detecting LVM2 PV regardless whether second magic
                 matches or not

2017-06-07  Emin Tufan Çetin <etcetin@gmail.com>

    Update Turkish translation

2017-05-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add PipeCapture line discipline tests
    
    Test that backspace and carriage return are processed correctly and
    Ctrl-A and Ctrl-B are skipped by PipeCapture.

2017-03-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Further improve speed of PipeCapture for non-watched output (#777973)
    
    For large output a lot of time is used copying capturebuf to callerbuf
    to provide a Glib::ustring copy of the buffer for the update callback.
    However update callbacks are only used when commands are run to apply
    operations by FileSystem::execute_command() and their output is
    incrementally displayed in the UI.  Whereas update callbacks are never
    used when commands are used to query information via
    Utils::execute_command().
    
    Stop performing interim copying of capturebuf to callerbuf when there
    are no update callbacks registered as it is unnecessary.
    
    Time to read portions of the recorded fsck.fat output via
    fat16::set_used_sectors() and intermediate copies aren't required:
    
                         1 MiB     10 MiB   122 MiB
        old code :   0.074 sec   1.41 sec   210 sec [3:30]
        new code :   0.063 sec   0.56 sec     6.57 sec
    
    Bug 777973 - Segmentation fault on bad disk

2017-03-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase PipeCapture maximum read size to 64K (#777973)
    
    For large output PipeCapture spends all it's time copying the capturebuf
    to callerbuf to provide a consistent view for any registered update
    callbacks.  This overhead is dependant of the size of the ever growing
    captured output and the number of times OnReadable() is called.
    Therefore increase the maximum read size to exponentially reduce this
    overhead.
    
    Time taken to read varying amounts of fsck.fat output with various
    read buffer sizes:
    
                     1 MiB   10 MiB            122 MiB
        512b  :   0.60 sec   65 sec [1:05]   17262 sec [4:47:42]
        4096b :   0.19 sec   13 sec           2157 sec [  35:57]
        64K   :   0.07 sec    1.4 sec          210 sec [   3:30]
    
    Note that this is only increasing the maximum size that can be read from
    the output of the external command.  If the command produces it's output
    slowly, such as the with progress reporting commands like mkfs.ext4,
    then only the available number of bytes is read reporting the next
    progress increment.  However if the command produces it's output
    quickly, such as when testing this bug using a modified fsck.fat
    concatenating the 122 MiB of pre-recorded output, then full buffer reads
    are performed.
    
    To ensure that a single call to OnReadable() couldn't block the UI too
    long, the time taken for OnReadable() to process a full buffer of
    various sizes was recorded as:
    
        512b  :   0.031 milliseconds
        4096b :   0.188 milliseconds
        64K   :   3.576 milliseconds
    
    Adding this amount of processing time in the UI under normal
    circumstances is not a problem.
    
    As the captured output increases, the time taken by OnReadable() becomes
    dominated by the time taken to copy the ever increasing capture buffer
    to handle it's expansion and to copy it to the caller buffer for the
    update callback.  At the end of the 122M captured fsck.fat output
    OnReadable() takes 350 milliseconds per call.  This is not a problem
    because this is an extreme case in which GParted is already hung and
    increasing the buffer size is reducing the overall hang time from over
    4 hours to a few minutes.
    
    Bug 777973 - Segmentation fault on bad disk

2017-03-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Workaround g_utf8_get_char_validate() bug with embedded NUL bytes (#777973)
    
    If PipeCapture reads a NUL byte in the middle of what is expected to be
    a multi-byte UTF-8 character then PipeCapture either returns the
    captured characters to the previous update or loops forever depending on
    whether the end of the stream is encountered before the read buffer is
    full or not.  This is equivalent to saying whether the NUL byte occurs
    within the last 512 bytes of the output or not.
    
    This is caused by a bug in g_utf8_get_char_validated() reporting that a
    partial UTF-8 character has been found when the NUL byte is encountered
    in the middle of a multi-byte character even though more bytes are
    available in the length specified buffer.  g_utf8_get_char_validated()
    is always stopping at the NUL byte assuming it is working with a NUL
    terminated string.
    
    Workaround this by checking for g_utf8_get_char_validated() claiming a
    partial UTF-8 character has been found when in fact there are at least
    enough bytes in the read buffer to instead determine that it is really
    an invalid UTF-8 character.
    
    Reference:
        Bug 780095 - g_utf8_get_char_validated() stopping at nul byte even
                     for length specified buffers
        https://bugzilla.gnome.org/show_bug.cgi?id=780095
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add test that PipeCapture can read NUL byte in middle of UTF-8 char (#777973)
    
    Test that binary data that happens to be the start of a multi-byte UTF-8
    character but then contains a NUL byte is successfully read.  The test
    currently detects failure thus:
    
        $ ./test_PipeCapture
        ...
        [ RUN      ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character
        test_PipeCapture.cc:346: Failure
              Expected: expectedstr
             Of length: 7
        To be equal to: capturedstr.raw()
             Of length: 0
        With first binary difference:
        < 0x00000000  "._45678"           00 5F 34 35 36 37 38
        --
        > 0x00000000  ""
        [  FAILED  ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character (0 ms)
        ...
    
    Bug 777973 - Segmentation fault on bad disk

2017-03-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Workaround g_utf8_find_next_char() not incrementing past NUL char (#777973)
    
    If PipeCapture reads a NUL character, a valid UTF-8 character, it causes
    GParted to allocate all available memory and crash.  The while loop in
    PipeCapture::OnReadable() loops forever reading the same NUL character
    from readbuf because g_utf8_find_next_char() doesn't advance past it.
    Hence an infinite number of NUL characters are added to the current
    line, linevec.
    
    Workaround this by checking for this failure case of
    g_utf8_find_next_char() and increment past the NUL character.
    
    This is actually a bug recently fixed in glib 2.49.3 released
    2016-07-17.  References:
    
    *   Bug 547200 - g_utf8_find_next_char() issues
        https://bugzilla.gnome.org/show_bug.cgi?id=547200
    
    *   https://git.gnome.org/browse/glib/commit/?id=e0e652e4032a181d4f0b0a12aeddf0678b7a3c04
        Fix a corner-case in g_utf8_find_next_char
    
        In the case that *p is '\0', we should return p + 1, not p.
        This change allows to simplify g_utf8_find_next_char a bit.
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add test that PipeCapture can read embedded NUL character (#777973)
    
    Test currently detects failure thus:
    
        $ ./test_PipeCapture
        ...
        [ RUN      ] PipeCaptureTest.ReadEmbeddedNULCharacter
        unknown file: Failure
        C++ exception with description "std::bad_alloc" thrown in the test body.
        [  FAILED  ] PipeCaptureTest.ReadEmbeddedNULCharacter (31917 ms)
        ...
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update PipeCaptureTest.MinimalBinaryCrash777973 expected string (#777973)
    
    PipeCapture::OnReadable() has been almost completely re-written but this
    test is still failing thus:
    
        $ ./test_PipeCapture
        ...
        [ RUN      ] PipeCaptureTest.MinimalBinaryCrash777973
        test_PipeCapture.cc:313: Failure
              Expected: inputstr
             Of length: 27
        To be equal to: capturedstr.raw()
             Of length: 26
        With first binary difference:
        < 0x00000010  "...!......."       A9 C2 A0 21 E2 95 9F E2 88 A9 C2
        --
        > 0x00000010  "...!......"        A9 C2 A0 21 E2 95 9F E2 88 A9
        [  FAILED  ] PipeCaptureTest.MinimalBinaryCrash777973 (0 ms)
        ...
    
    The OnReadable() code specifically skips invalid bytes which aren't part
    of valid UTF-8 characters, because they can't be displayed to the user.
    The final C2 byte is the start of a multi-byte UTF-8 character, so on
    it's own is invalid.  Therefore PipeCapture skips it.  Update expected
    string accordingly.  Now the test passes.
    
    Bug 777973 - Segmentation fault on bad disk

2017-03-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Improve the performance of PipeCapture for large output (#777973)
    
    A user had a very corrupted FAT file system such that fsck.fat produced
    122 MiB of output.  GParted has to read this output to get the file
    system usage information.  However GParted takes more than 48 hours to
    read the 122 MiB of output, while using 100% CPU time and is
    unresponsive for the duration.
    
    Modified fsck.fat to output just the first 1 MiB of output and used perf
    to capture performance data from GParted reading that output:
        # perf -g -F 1999 -- ./gpartedbin
        # perf report --stdio
          67.84% Glib::ustring::replace      [4.23s]
          17.67% g_utf8_pointer_to_offset    [1.10s]
           8.48% g_utf8_offset_to_pointer    [0.53s]
        [  6.01% (everything else)       ]   [0.38s]
        [100.00% TOTAL                   ]   [6.24s]
    
    And to read the first 10 MiB of output the performance figures are:
          92.95% Glib::ustring::replace      [257.44s]
           4.35% g_utf8_pointer_to_offset    [ 12.05s]
           2.13% g_utf8_offset_to_pointer    [  5.90s]
        [  0.58% (everything else)       ]   [  1.61s]
        [100.00% TOTAL                   ]   [277.00s]
    
    See how the total time is increasing non-linearly, 44 times longer for
    only 10 times as much data.  This is because of the exponential increase
    in time spent in Glib::ustring::replace.
    
    After a lot of experimentation I came to the conclusion that
    Glib::ustrings are not appropriate for storing and editing large buffers
    of data, sizes megabytes and above.  The issues are that iterators are
    invalid after the content changes and replacing UTF-8 characters by
    index gets exponentially slower as the size of the string increases.
    Hence the > 48 hours of 100% CPU time to read and apply the line
    discipline to the 122 MiB of fsck.fat output.  See code comment for a
    more detailed description of the issues found.
    
    Rewrote OnReadable() to use Glib::ustrings as little as possible.
    Instead using buffers and vectors of fixed width data types allowing for
    fast access using pointers and indexes (converted to pointers by the
    compiler with simple arithmetic).  Again see code comment for a more
    detailed description of the implementation.
    
    Repeating the performance capture with the new code for the first 1 MiB
    of fsck.fat output:
          63.34% memcpy                      [0.35s]
        [ 36.66% (everything else)       ]   [0.21s]
        [100.00% TOTAL                   ]   [0.56s]
    
    And for the first 10 MiB of fsck.fat output:
          96.66% memcpy                      [63.60s]
        [  3.34% (everything else)       ]   [ 2.20s]
        [100.00% TOTAL                   ]   [65.80s]
    
    Simple timings taken to read portions of the fsck.fat output (when not
    using perf):
    
                       1 MiB    10 MiB      122 MiB
        old code :   6.2 sec   277 sec   > 48 hours
                                (4:37)
        new code :   0.6 sec    66 sec    17262 sec
                                (1:06)    (4:47:42)
    
    Performance of the code is still non-linear because of the assignment
    of the ever growing capturebuf to callerbuf for every block of input
    read.  This is required to generate a consistent Glib::ustring copy of
    the input for the update callback.  However this is much faster than
    before, and I have a plan for further improvements.
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Test that PipeCapture clears capture buffer before it starts (#777973)
    
    Initialise capture string with sacrificial text before each test.
    Existing tests confirm this is cleared first by checking the captured
    string matches the input string.
    
    Bug 777973 - Segmentation fault on bad disk

2017-03-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move initial clearing of output capture buffers into PipeCapture class (#777973)
    
    Seems more logical to initially clear the output capture buffer in a
    single location in the PipeCapture class which reads the command output
    into said buffer, rather than each calling site before the PipeCapture
    objects are constructed.
    
    Bug 777973 - Segmentation fault on bad disk

2017-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent core dump reading none UTF-8 data from external command (#777973)
    
    A user had a very corrupted FAT file system and when GParted was reading
    the file system usage it would core dump.  The tip of the stack trace
    was:
    
        #0 Glib::ustring_Iterator<__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::operator++()
           at /usr/include/glibmm-2.4/glibmm/ustring.h line 957
        #1 Glib::ustring_Iterator<__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::operator++(int)
           at /usr/include/glibmm-2.4/glibmm/ustring.h line 965
        #2 GParted::PipeCapture::OnReadable(Glib::IOCondition)
           at PipeCapture.cc line 63
        #3 GParted::PipeCapture::_OnReadable(_GIOChannel*, GIOCondition, void*)
           at PipeCapture.cc line 45
    
    GParted uses 'fsck.fat -n -v /dev/PTN' to get the file system usage.
    However because the file system was so corrupted it was reporting every
    file name as being damaged, including the file names being reported as
    binary data.  PipeCapture::OnReadable() reads up to 512 bytes at a time
    and then uses a Glib::ustring iterator to loop over the UTF-8
    characters, but a Glib::ustring iterator is explicitly not capable of
    reading binary data [1].  With invalid UTF-8 bytes the code continued to
    read beyond the end of the string until GParted crashed with a
    segmentation violation.
    
    Fix by accessing the read string by index instead of by iterator.
    
    [1] Quote from the Glib::ustring_Iterator<T> Class Template Reference:
        https://developer.gnome.org/glibmm/stable/classGlib_1_1ustring__Iterator.html
    
        "The Glib::ustring iterated over must contain only valid UTF-8 data.
        If it does not, operator++(), operator--() and operator*() may make
        accesses outside the bounds of the string."
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add test for bug with PipeCapture crashing reading binary data (#777973)
    
    A user had a very corrupt FAT file system and fsck.fat was reporting
    binary data in file names with errors.  GParted crashed reading this
    output.  Boiled down the problematic fsck.fat output to a sample 27
    bytes which still triggers a crash and created a test for it.  The test
    crashes test_PipeCapture program too.
    
        $ ./test_PipeCapture
        ...
        [ RUN      ] PipeCaptureTest.MinimalBinaryCrash777973
        Segmentation fault (core dumped)
        $ echo $?
        139
    
    However it still produces a non-zero exit status and the autotools test
    runner detects this so 'make check' still reports failure.
    
        $ make check
        ...
        make[2]: Entering directory `/home/centos/programming/c/gparted/tests'
        PASS: test_dummy
        PASS: test_BlockSpecial
        ../test-driver: line 95: 16152 Segmentation fault      "$@" > $log_file 2>&1
        FAIL: test_PipeCapture
        ...
        ============================================================================
        Testsuite summary for gparted 0.28.1-git
        ============================================================================
        # TOTAL: 3
        # PASS:  2
        # SKIP:  0
        # XFAIL: 0
        # FAIL:  1
        # XPASS: 0
        # ERROR: 0
        ============================================================================
        See tests/test-suite.log
        Please report to https://bugzilla.gnome.org/enter_bug.cgi?product=gparted
        ============================================================================
        make[2]: *** [test-suite.log] Error 1
        make[2]: Leaving directory `/home/centos/programming/c/gparted/tests'
        make[1]: *** [check-TESTS] Error 2
        make[1]: Leaving directory `/home/centos/programming/c/gparted/tests'
        make: *** [check-am] Error 2
        $ echo $?
        2
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add check of PipeCapture update callback (#777973)
    
    Also ensure that the PipeCapture calls registered update callbacks and
    that the data so far captured matches the leading portion of the input.
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add binary data string difference reporting to PipeCapture tests (#777973)
    
    Google Test string comparison asserts are only designed of C style
    strings containing printable text of one or more lines with a
    terminating NUL character.  GParted is crashing when PipeCapture is
    reading the binary file names being reported by fsck.fat from a very
    corrupted FAT file system.  Therefore need to be able to compare and
    report differences of binary data stored in C++ std::string and
    Glib::ustrings.  Write a specific assertion to handle this.
    
    Now these sample tests:
    
        TEST_F( PipeCaptureTest, BinaryStringFailure )
        {
            inputstr = "AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCC";
            capturedstr = "AAAAAAAAAAAAAAAABBBBBBBBBBbbbb";
            EXPECT_BINARYSTRINGEQ( inputstr, capturedstr.raw() );
        }
    
        TEST_F( PipeCaptureTest, LeadingBinaryStringFailure )
        {
            inputstr = "The quick brown fox jumps over the lazy dog";
            capturedstr = "The quick brown fox\n";
            EXPECT_BINARYSTRINGEQ( inputstr.substr( 0, capturedstr.raw().length() ),
                                   capturedstr.raw() );
        }
    
    report failure like this:
    
        $ ./test_PipeCapture
        ...
    
        [ RUN      ] PipeCaptureTest.BinaryStringFailure
        test_PipeCapture.cc:270: Failure
              Expected: inputstr
             Of length: 48
        To be equal to: capturedstr.raw()
             Of length: 30
        With first binary difference:
        < 0x00000010  "BBBBBBBBBBBBBBBB"  42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
        --
        > 0x00000010  "BBBBBBBBBBbbbb"    42 42 42 42 42 42 42 42 42 42 62 62 62 62
        [  FAILED  ] PipeCaptureTest.BinaryStringFailure (1 ms)
        [ RUN      ] PipeCaptureTest.LeadingBinaryStringFailure
        test_PipeCapture.cc:278: Failure
              Expected: inputstr.substr( 0, capturedstr.raw().length() )
             Of length: 20
        To be equal to: capturedstr.raw()
             Of length: 20
        With first binary difference:
        < 0x00000010  "fox "              66 6F 78 20
        --
        > 0x00000010  "fox."              66 6F 78 0A
        [  FAILED  ] PipeCaptureTest.LeadingBinaryStringFailure (0 ms)
        ...
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add 1 MiB ASCII PipeCapture test (#777973)
    
    Add test sending 1 MiB of ASCII test into PipeCapture to read.  This
    requires multiple reads and rewites through the pipe.
    
    This is as much a check of the threading in the PipeCaptureTest class as
    it is of PipeCapture itself.  This is because a single thread might
    block reading from a pipe waiting for itself to write to the pipe.
    Deadlock.  Hence the requirement to use a separate thread for reading
    and writing.
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Initialise Glib threading system in test_PipeCapture (#777973)
    
    On CentOS 6, with glib/glibmm 2.28, running the tests fails thus:
    
        $ ./test_PipeCapture
        Running main() from gtest_main.cc
        [==========] Running 4 tests from 1 test case.
        [----------] Global test environment set-up.
        [----------] 4 tests from PipeCaptureTest
        [ RUN      ] PipeCaptureTest.EmptyPipe
    
        GLib-ERROR **: The thread system is not yet initialized.
        aborting...
        Aborted (core dumped)
    
    For glib before version 2.32, the threading system must be explicitly
    initialised with a call to g_thread_init(), or the Glibmm
    Glib::thread_init() equivalent to prevent this error.
    
        Deprecated thread API, g_thread_init()
        https://developer.gnome.org/glib/stable/glib-Deprecated-Thread-APIs.html#g-thread-init
    
    Do this by providing our own main() which also initialises the Glib
    threading system, rather using and linking in the Google Test provided
    main().
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add initial unit tests for PipeCapture (#777973)
    
    So far just tests sending 0 bytes and a few ASCII bytes into a pipe and
    that they are read correctly by the PipeCapture class.
    
    Bug 777973 - Segmentation fault on bad disk

2017-05-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused build definition GPARTED_DATADIR
    
    Definition has been unused since this commit first released in GParted
    0.5.0:
        c2d19a8ab4eb9e8a9875a7bd7dd0802b9f8303b2
        Replace gnome-open with gtk_show_uri (#600046)

2017-04-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove old .cvsignore files
    
    As the source code is managed in GIT and there is a .gitignore file in
    the top level directory specifying file names to exclude from version
    control, then the old per-directory .cvsignore files for CVS are
    redundant.
    
    Add the only missing and applicable entry from src/.cvsignore of '.libs'
    to .gitignore and remove all the .cvsignore files.

2017-04-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement libtoolize suggestion setting ACLOCAL_AMFLAGS
    
    Running ./autogen.sh reports this suggestion:
        libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
    
    Add suggested setting as it causes no difference and silences the
    suggestion.
    
    The Libtool Manual, 5.5.1 Invoking libtoolize
    https://www.gnu.org/software/libtool/manual/html_node/Invoking-libtoolize.html
    
        "If libtoolize detects an explicit call to AC_CONFIG_MACRO_DIRS (see
        The Autoconf Manual in The Autoconf Manual) in your configure.ac, it
        will put the Libtool macros in the specified directory.
    
        In the future other Autotools will automatically check the contents
        of AC_CONFIG_MACRO_DIRS, but at the moment it is more portable to
        add the macro directory to ACLOCAL_AMFLAGS in Makefile.am, which is
        where the tools currently look. If libtoolize doesn't see
        AC_CONFIG_MACRO_DIRS, it too will honour the first '-I' argument in
        ACLOCAL_AMFLAGS when choosing a directory to store libtool
        configuration macros in. It is perfectly sensible to use both
        AC_CONFIG_MACRO_DIRS and ACLOCAL_AMFLAGS, as long as they are kept
        in synchronisation.
    
            ACLOCAL_AMFLAGS = -I m4
        "

2017-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Improve diagnostics of failed BlockSpecial operator tests (#781978)
    
    Deliberately breaking one of the operator<() tests produces less than
    ideal diagnostics because it doesn't print the BlockSpecial objects
    being compared.
    
        $ ./test_BlockSpecial
        ...
        [ RUN      ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects
        test_BlockSpecial.cc:362: Failure
        Value of: bs1 < bs2
          Actual: true
        Expected: false
        [  FAILED  ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects (1 ms)
        ...
    
    This could be solved by using the Google Test Binary Comparison
    assertions, however in the tests for false from (bs1 == bs2) and
    (bs1 < bs2) comparisons then operators != and >= would have to be
    implemented and the tests changed from:
        EXPECT_FALSE( bs1 < bs2 );
    to:
        EXPECT_GE( bs1, bs2 );
    This makes the meaning of the test less than clear.  The primary purpose
    of the test is to check operator<(), but it is expecting the first
    BlockSpecial object to be GE (greater than or equal to) than the second,
    which is calling operator>=() which in turn is testing operator<().  For
    tests of the operators themselves using Google Test Binary Comparison
    assertions obscures what is being tested too much.
    
    Instead provide a custom failure message which prints the BlockSpecial
    objects failing the comparison, leaving the test still directly calling
    the operator being tested, like this:
        EXPECT_FALSE( bs1 < bs2 ) << "   Where: bs1 = " << bs1 << "\n"
                                  << "     And: bs2 = " << bs2;
    And with a suitable macro this is simplified to:
        EXPECT_FALSE( bs1 < bs2 ) << ON_FAILURE_WHERE( bs1, bs2 );
    Now the above deliberately broken test produces this output:
    
        $ ./test_BlockSpecial
        ...
        [ RUN      ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects
        test_BlockSpecial.cc:369: Failure
        Value of: bs1 < bs2
          Actual: true
        Expected: false
           Where: bs1 = BlockSpecial{"",0,0}
             And: bs2 = BlockSpecial{"",0,0}
        [  FAILED  ] BlockSpecialTest.OperatorLessThanTwoEmptyObjects (0 ms)
        ...
    
    Bug 781978 - Add Google Test C++ test framework

2017-05-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add BlockSpecial operator<() tests (#781978)
    
    Bug 781978 - Add Google Test C++ test framework

2017-05-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add test for bug #771670 in BlockSpecial::operator==() (#781978)
    
    Add a specific test for the failure found in bug 771670 and fixed by
    commit:
        253c4d641687f21a4656af0926af18371d47d654
        Fix BlockSpecial comparison (#771670)
    
    Bug 781978 - Add Google Test C++ test framework

2017-05-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add BlockSpecial operator==() tests (#781978)
    
    Bug 781978 - Add Google Test C++ test framework

2017-05-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit tests for BlockSpecial constructors and internal caching (#781978)
    
    So far only includes tests of the construction of BlockSpecial objects
    and the interaction with the internal cache used to reduce the number of
    stat(2) calls.  Tests have been designed to be runable by non-root users
    and assume as little as possible about the environment by discovering
    used block device names and symbolic link name.
    
    Bug 781978 - Add Google Test C++ test framework

2017-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix make distcheck failure from missing libgtest_main.la (#781978)
    
    Running 'make distcheck' fails like this:
        [...]
        make[3]: Entering directory `[...]/gparted/gparted-0.28.1-git/_build/tests'
        [...]
        /bin/sh ../libtool --tag=CXX --mode=link g++ [...] ../../lib/gtest/lib/libgtest_main.la ../../lib/gtest/lib/libgtest.la [...]
        libtool: link: cannot find the library `../../lib/gtest/lib/libgtest_main.la' or unhandled argument `../../lib/gtest/lib/libgtest_main.la'
        make[3]: *** [test_dummy] Error 1
        make[3]: Leaving directory `[...]/gparted/gparted-0.28.1-git/_build/tests'
        [...]
        make[1]: Leaving directory `[...]/gparted/gparted-0.28.1-git/_build'
        make: *** [distcheck] Error 1
    
    What is happening is that distcheck [1] performs a VPATH build which
    uses separate read-only source and read-write build trees.  Shipped
    source files, such as .h and .cc, are located in the source tree and the
    built files, such as .o and .la, are compiled into the build tree.  In
    this case the absolute path to libgtest_main.la is specified using
    $(top_srcdir) for the source tree, rather than $(top_builddir) for the
    build tree, hence the cannot find file type error.  This error doesn't
    occur when just performing a 'make check' because that builds in the
    source tree so $(top_builddir) is the same as $(top_srcdir).
    
    Fix by correctly specifying the absolute path to the libgtest*.la files
    using $(top_builddir).
    
    [1] Automake Manual, 14.4 Checking the Distribution
        https://www.gnu.org/software/automake/manual/automake.html#Checking-the-Distribution
    
    Note that for VPATH builds the Automake Manual [2] also recommends using
    a pair of -I options to specify header files are found in both the build
    and source trees, something like:
        AM_CPPFLAGS = -I$(top_builddir)/some/subdir -I$(top_srcdir)/some/subdir
    
    This is unnecessary for GParted as all header files are shipped as part
    of the source archive and no header files are created as part of the
    build process.  Therefore adding -I options specifying $(top_builddir)
    include directories would just be specifying empty or non-existent
    include directories in the build tree.
    
    [2] Automake Manual, 8.7 Variables used when building a program
        https://www.gnu.org/software/automake/manual/automake.html#Program-Variables
    
    Bug 781978 - Add Google Test C++ test framework

2017-04-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add unit test suites with initial successful dummy test (#781978)
    
    Now 'make check' will additionally build and run the test suites in the
    ./tests directory.  Add initial always successful dummy test suite.
    This is done using Automake support for testing.
    
        Automake Manual, 15 Support for test suites
        https://www.gnu.org/software/automake/manual/automake.html#Tests
    
    ./tests/Makefile.am takes some influence from the same file in the
    minimal-gtest-autotools template project.
        https://github.com/octol/minimal-gtest-autotools/blob/654848ec0164a80f851fa80b8355099f35c025a2/tests/Makefile.am
    
    Bug 781978 - Add Google Test C++ test framework

2017-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add building of Google Test libraries (#781978)
    
    This closely follows the minimal-gtest-autotools template project.
        https://github.com/octol/minimal-gtest-autotools
    
    Now 'make check' will additionally build the Google Test C++ test
    framework libraries.
    
    Bug 781978 - Add Google Test C++ test framework

2016-10-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to conditional appending of SUBDIRS in top-level Makefile.am (#781978)
    
    rather than having two conditional complete definitions of SUBDIRS.
    
    Bug 781978 - Add Google Test C++ test framework

2017-04-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Exclude 2 gtest files from translation (#781978)
    
    Running 'make check' is failing, reporting that 2 of the Google Test
    files need to be translated.
    
        $ make check
        ...
        Making check in po
        make[1]: Entering directory `/home/centos/programming/c/gparted/po'
        rm -f missing notexist
        srcdir=. /usr/bin/intltool-update -m
        The following files contain translations and are currently not in use. Please
        consider adding these to the POTFILES.in file, located in the po/ directory.
    
        lib/gtest/include/gtest/internal/gtest-filepath.h
        lib/gtest/src/gtest.cc
    
        If some of these files are left out on purpose then please add them to
        POTFILES.skip instead of POTFILES.in. A file 'missing' containing this list
        of left out files has been written in the current directory.
        Please report to https://bugzilla.gnome.org/enter_bug.cgi?product=gparted
        if [ -r missing -o -r notexist ]; then \
          exit 1; \
        fi
        make[1]: *** [check] Error 1
        make[1]: Leaving directory `/home/centos/programming/c/gparted/po'
        make: *** [check-recursive] Error 1
        'make check' is failing
    
    This is not true, the files do not contain translatable strings.  This
    is a match for known intltool bug:
    
        False positives from intltool-update -m
        https://bugs.launchpad.net/intltool/+bug/545862
    
    Fix by adding the problem file names into POTFILES.skip.
    
    Bug 781978 - Add Google Test C++ test framework

2017-04-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update README with the inclusion of Google Test framework (#781978)
    
    Document the files and license of the Google Test C++ test framework.
    
    Bug 781978 - Add Google Test C++ test framework

2017-04-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Google Test 1.8.0 files (#781978)
    
    Copy the Google Test C++ test framework (subset needed to build the unit
    testing libraries) into the GParted project.  Copy the following files
    and directories from Google Test, release 1.8.0:
        LICENSE
        README.md
        include/
        src/
    into lib/gtest/.  All the files are under the BSD license as documented
    in lib/gtest/LICENSE.
    
    Bug 781978 - Add Google Test C++ test framework

2017-05-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update comment with example LUKS_Info cache entry
    
    Reflect the change made to the data model in commit:
        Use BlockSpecial in LUKS_Info module cache (#767842)
        7cd574cac5f7d076ebd94795f5c6f41b333fdee7

2017-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Quote mount point in Data Rescue dialog (#782681)
    
    As before always quote use of mount points in command lines.
    
    Bug 782681 - btrfs partitions mounted with whitespace cannot be resized

2017-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Quote mount point when copying and resizing xfs (#782681)
    
    Attempting to grow an already mounted xfs where the mount point
    contained spaces failed like this:
    
        Grow /dev/sdb4 from 1.00 GiB to 1.50 GiB
        + calibrate /dev/sdb4
        + grow partition from 1.00 GiB to 1.50 GiB
        + grow file system to fill the partition
          + xfs_growfs /tmp/File System Label
            Usage: xfs_growfs [options] mountpoint
            ...
    
    Apply the rule and quote all uses of mount points within command lines.
    This is also applied to copying xfs file systems even though it was safe
    because it only ever used GParted generated mount points.
    
    Also for the xfs copy operation switch unmounting of partitions to
    specify mount points instead of partitions.  This is just to be
    consistent with how it is done in all the online file system resizing
    code.
    
    Bug 782681 - btrfs partitions mounted with whitespace cannot be resized

2017-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Quote mount point when resizing nilfs2 (#782681)
    
    The current nilfs2 resizing code is safe because it never passes a user
    influenced mount point into a command line.  Regardless, apply the same
    simple rule to always quote mount points when used in command lines.
    
    WARNING:
    Nilfs-resize is broken and can't actually resize a file system mounted
    with spaces in the mount point anyway!
    
        # mkdir "/tmp/File System Label"
        # mount -v -t nilfs2 /dev/sdb3 "/tmp/File System Label"
        mount.nilfs2: started nilfs_cleanerd
        # nilfs-resize -v -y /dev/sdb3
        Error: cannot open NILFS on /dev/sdb3.
        # echo $?
        1
        # strace nilfs-resize -v -y /dev/sdb3
        ...
        stat("/dev/sdb3", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 19), ...}) = 0
        open("/dev/sdb3", O_RDONLY)             = 3
        ...
        open("/proc/mounts", O_RDONLY)          = 4
        read(4, "sysfs /sys sysfs rw,seclabel,nos"..., 1024) = 1024
        ...
        close(4)                                = 0
        open("/tmp/File\\040System\\040Label", O_RDONLY) = -1 ENOENT (No such file or directory)
        ...
        # fgrep /dev/sd /proc/mounts
        /dev/sda3 / ext4 rw,seclabel,relatime,data=ordered 0 0
        /dev/sda1 /boot ext4 rw,seclabel,relatime,data=ordered 0 0
        /dev/sdb3 /tmp/File\040System\040Label nilfs2 rw,relatime 0 0
    
    So it looks like nilfs-resize (or a library it uses) can't decode the
    octal characters '\040' used to encode spaces in the mount point as
    reported in /proc/mounts.
    
    Bug 782681 - btrfs partitions mounted with whitespace cannot be resized

2017-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Quote mount point when resizing jfs (#782681)
    
    Attempting to grow an already mounted jfs where the mount point
    contained spaces failed like this:
    
        Grow /dev/sdb2 from 1.00 GiB to 1.50 GiB
        + calibrate /dev/sdb2
        + grow partition from 1.00 GiB to 1.50 GiB
        + grow file system to fill the partition
          + mount -v -t jfs -o remount,resize /dev/sdb2 /tmp/File System Label
            Usage:
            mount [-lhV]
            mount -a [options]
            mount [options] [--source[ <source> | [--target] <directory>
            mount [options] <source> <directory>
            mount <operation> <mountpoint> [<target>]
            ...
    
    Apply the rule to always enclose mount points within double quotes
    within command lines.
    
    Bug 782681 - btrfs partitions mounted with whitespace cannot be resized

2017-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Quote mount point when resizing btrfs (#782681)
    
    A user had a btrfs file system mounted by automounter on a mount point
    like "/mount/$USER/File System Label" which included white space
    characters.  Resizing the file system while online failed like this:
    
        Grow /dev/sdb1 from 1.00 GiB to 1.50 GiB
        + calibrate /dev/sdb1
        + grow partition from 1.00 GiB to 1.50 GiB
        + grow file system to fill the partition
          + btrfs filesystem resize 1:max /mount/USER/File System Label
              btrfs filesystem resize: too many arguments
              usage: btrfs filesystem resize [devid:][+/-]<newsize>[kKmMgGtTpPeE]|[devid:]max <path>
    
    So mount points not created by GParted should be considered under user
    control and need quoting when used as parameters in command lines.
    Strictly speaking, mount points created by GParted itself, by
    FileSystem::mk_temp_dir(), are safe and don't need quoting.  However it
    is simpler and safer just to quote all uses of mount points in command
    lines, rather than risk missing some.
    
    Bug 782681 - btrfs partitions mounted with whitespace cannot be resized

2017-04-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix snap-to-alignment of operations creating partitions (#779339)
    
    Using the default MiB alignment, creating an MSDOS logical partition
    between two other existing logical partitions fails with this error
    dialog:
    
        (-) <b>An error occurred while applying the operations</b>
            See the details for more information.
            <b>IMPORTANT</b>
            If you want support, you need to provide the saved details!
            See http://gparted.org/save-details.htm for more information.
                                                                   [ OK ]
    
    and these operation details:
    
        + libparted messages
          - Unable to satisfy all constraints on the partition.
    
    This bug was introduced by this commit included in GParted 0.23.0:
        90e3ed68fc60c1395c2f3c20ed0b4493037753fb
        Shallow copy Device object into Operation object (#750168)
    
    The commit message claimed that the deep copied Partition objects inside
    the Device inside the Operation object are never accessed.  This turned
    out not to be true.  Win_GParted::Add_Operation() uses them as part of
    snap_to_alignment() which updates requested partition boundaries to
    account for alignment requirements and the space needed for EBR
    (Extended Boot Record) preceding logical partitions.
    
    In this case the new logical partition was trying to be created over the
    top of the EBR for the following logical partition because
    snap_to_alignment() wasn't aware of its existence.
    
    Fix by making Add_Operation() and snap_to_alignment() refer to the
    current device, as displayed in the UI, rather than the shallow copy
    included in the Operation object.  Hopefully now it is true that the
    not copied vector of Partition objects in the Device object in each
    Operation object are never accessed.
    
    Bug 779339 - enforce at least 1 MiB "free space following"

2017-04-10  gogo <trebelnik2@gmail.com>

    Update Croatian translation

2017-03-26  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2017-03-15  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-02-18  Jiri Grönroos <jiri.gronroos@iki.fi>

    Update Finnish translation

2017-02-17  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2017-02-17  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.28.1   ==========

2017-02-16  Curtis Gedak <gedakc@gmail.com>

    Restore ability to grow primary w/unallocated space before extended (#778700)
    
    A regression which prevented growing a primary partition that had
    unallocated space between it and the following extended partition was
    introduced with the following commit:
    
      Create and use general find_extended_partition() function
      aa98107706405fe0a80d4fd1a1ddb0838518ea7f
    
    To fix the regression, restore the logic that checked for a logical
    partition before seeking the index of the extended partition.
    
    Bug 778700 - Unable to grow partition even though unallocated space is
                 adjacent

2017-02-14  Curtis Gedak <gedakc@gmail.com>

    Work around make distcheck issue (#778628)
    
    The command 'make distcheck' runs a build in dist directory subdirs
    and then runs intltool -m which in turn complains about translations
    in a built file:
    
      The following files contain translations and are currently not in
      use. Please consider adding these to the POTFILES.in file, located
      in the po/ directory.
    
      sub/gparted.desktop.in
    
    See also upstream intltool issue bug report:
    
      intltool confused by separate build-dir
      https://bugs.launchpad.net/intltool/+bug/1117944
    
    Bug 778628 - Work around automake-1.15 & intltool complaining about
                 translations in build dir

2017-02-11  Refael Sheinker <refaelsh@gmail.com>

    Make the Name Partition dialog a bit bigger (#778003)
    
    Increase the size of the Name Partition dialog, matching the change made
    to the Label File System dialog in the previous commit.  The code for
    the Name Partition dialog was basically copied from the Label File
    System dialog.
    
    Bug 778003 - The "Label File System" dialog is too small

2017-02-01  Refael Sheinker <refaelsh@gmail.com>

    Make "Label File System" dialog a bit bigger (#778003)
    
    On Arch Linux with XFCE 4.12 and Fedora 24 with GNOME 3.20 and later;
    the Label File System dialog is too small.  The problem is that the
    label entry box clips the Cancel and OK buttons.
    
    Stop specifying the dialog height, instead letting it fit the combined
    height of all the widgets automatically.
    
    Also make the dialog wider and the label entry box wider so that longer
    device names can be shown in the title before they are truncated.
    
    Bug 778003 - The "Label File System" dialog is too small

2017-02-14  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2017-02-14  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.28.0   ==========

2017-02-14  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2017-02-14  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2017-02-13  Alexandre Franke <alexandre.franke@gmail.com>

    Update French translation

2017-02-13  Andika Triwidada <atriwidada@gnome.org>

    Update Indonesian translation

2017-02-12  Alexandre Franke <alexandre.franke@gmail.com>

    Update French translation

2017-02-12  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2017-02-11  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2017-02-11  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2017-02-10  Marek Cernocky <marek_cernocky@conel.cz>

    Updated Czech translation

2017-02-10  Trần Ngọc Quân <vnwildman@gmail.com>

    Updated Vietnamese translation
    
    Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>

2017-02-09  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2017-02-07  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2017-02-07  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2017-02-07  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2017-02-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Improve error message in check_repair_filesystem() (#774818)
    
    Change the error message after it raised a question with the translators
    and to better align with the operation only being described as a check
    in the GParted Manual and in the application UI.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2017-02-07  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2017-02-06  Josef Andersson <josef.andersson@gmail.com>

    Update Swedish translation

2017-02-05  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2017-02-04  Josef Andersson <josef.andersson@gmail.com>

    Update Swedish translation

2017-02-04  Mario Blättermann <mario.blaettermann@gmail.com>

    Update German translation

2017-01-28  Piotr Drąg <piotrdrag@gmail.com>

    Fix translator comments
    
    They need to be exactly one line above a string to show up in .po files.

2017-01-17  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2017-01-17  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2017-01-15  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2016-08-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create and use general find_extended_partition() function
    
    The Operation class already provided find_index_extended() method and
     was used in the Operation and derived classes where required.  It
    returns the index to the extended partition in the PartitionVector
    object, or -1 when no extended partition exists.
    
    There were several cases of the same functionality being open coded in
    GParted_Core and Win_GParted.  Therefore move the implementation to
    find_extended_partition() in PartitionVector compilation unit and use
    this implementation everywhere.

2016-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace 2 Win_GParted member variables with local variables
    
    Member variables fs and gpart_output were used in just one method each
    as local variables.  Replace them with local variables.

2016-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix for loop limit in fat16::sanitize_label()
    
    Use the same uppercase_label string to determine the limit of the for
    loop as is actually accessed.

2016-12-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused clear_mountpoints parameter from add_mountpoint*()
    
    The clear_mountpoints parameter has never been used since
    add_mountpoint*() were first added [1][2].  clear_mountpoints() method
    [3] is available to provide this functionality and used.  Therefore
    removed unused parameter and code.
    
    [1] add_mountpoints() added 2006-03-15
            9532c3cad127483f851b4cbc9852eb10f22741c6
            Made Partition::mountpoints private
    
    [2] add_mountpoint() added 2011-12-16
            208083f11d84dbd4f186271a3cdbf5170db259f8b8
            Display LVM2 VGNAME as the PV's mount point (#160787)
    
    [3] clear_mountpoint() added 2006-03-19
            ad9f2126e7fc92c16fffe839847dfe1c520146c8
            fixed issues with copying (see also #335004) cleanups + added FIXME added

2017-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add LUKS notes to the GParted Manual (#774818)
    
    Add LUKS encrypted partition notes to the GParted Manual about the new
    capabilities coming in the next release of GParted.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-10-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Document new requirement on the cryptsetup command (#774818)
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2017-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add "Available online only" to the Supported Actions legend (#774818)
    
    Shrinking LUKS encryption is only possible while the mapping is open and
    active.  Therefore the File System Support dialog shows Cross + Tick for
    this operation.  Add this new combination to the legend.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use virtual get_filessytem_string() in remaining operation descriptions (#774818)
    
    Switch the remaining create and delete operation description generation
    to use the virtual Partition get_filesystem_string() method.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-11-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent deletion of open LUKS mappings (#774818)
    
    At least until closing LUKS mappings is supported.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement maximize encryption volume as part of check repair operation (#774818)
    
    Now that resizing of encrypted file systems is implemented add growing
    of the open LUKS mapping as part of the check repair operation.
    
    Resizing an encrypted file system requires the LUKS mapping to be open
    to access the file system within; therefore it also requires libparted
    and kernel support for online partition resizing.  This limits resizing
    to the latest distributions with libparted >= 3.2 and kernel >= 3.6.
    However growing an open LUKS mapping as part of a check repair operation
    doesn't require resizing the partition.  Therefore route via offline
    grow of LUKS to avoid those extra, unnecessary requirement.  This does
    mean that offline LUKS grow artificially requires cryptsetup, but that is
    not really significant as even opening LUKS requires cryptsetup.
    
    So now checking an encrypted file system on even the oldest
    distributions does:
    1) runs FSCK on the encrypted file system;
    2) grows the encryption volume to fill the partition;
    3) grows the file system to fill the encryption mapping.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement offline grow of encryption volumes (#774818)
    
    While a device-mapper encryption mapping can only be resized while
    active, a LUKS volume can inherently be grown while offline because it
    doesn't store a size and when started fills the partition.  This doesn't
    even need the cryptsetup command to do the resizing (just to open the
    LUKS volume afterwards which GParted doesn't yet support).  Implement
    offline growing of LUKS volumes.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bug checks into resize/move operation methods (#774818)
    
    Ensure pre-conditions of always or never being passed a Partition object
    containing an open LUKS encryption are met for resizing file system and
    LUKS encryption methods.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement resize/move operation of encrypted file systems (#774818)
    
    Moving of closed LUKS is simply enabled by luks .move capability being
    set and requires no further coding.
    
    Resizing of encrypted file systems requires both the LUKS mapping and
    encrypted file system within to be resized in the right order for both
    shrinking and growing.  To keep the code simple split resizing of plain
    and encrypted into separate functions.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-11-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Preview resize/move operation of encrypted file systems (#774818)
    
    Changing the Resize/Move dialog code to also handle PartitionLUKS
    objects was considered too complicated.  Instead create an unencrypted
    equivalent using clone_as_plain(), pass that to the Resize/Move dialog
    and finally apply the change back using Partition*::resize().
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Partition object resizing method Partition*::resize() (#774818)
    
    Add a resize() method to both Partition and PartitionLUKS classes.  They
    take a reference Partition object, and update the position, size and
    file system usage of *this Partition to match.  This is ready for taking
    a partition returned from Resize/Move dialog and applying the change.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add specialist clone method PartitionLUKS::clone_as_plain() (#774818)
    
    Implement a specialist PartitionLUKS clone method.  Creates a new
    Partition object which has the same space usage as the source encrypted
    file system, but is a plain file system.  Namely, the overhead of the
    LUKS header has been added to the file system usage.  This is ready for
    feeding this representation of the partition to the Resize/Move dialog.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-11-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable resize/move for encrypted file systems (#774818)
    
    A partition containing LUKS encryption can only be moved when closed and
    the Device Mapper encryption mapping only exists to be resized when
    open.  As GParted can't yet open or close LUKS encryption these
    restrictions have to be adhered to when composing operations.  Also as
    encrypted partitions are only being resized when open, additionally
    libparted and the kernel have to both be capable of resizing a partition
    while in use.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bug checks into copy operation methods (#774818)
    
    Ensure pre-condition of never being passed a Partition object containing
    an open LUKS encryption mapping is met for copy operation related
    methods.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display LUKS copy capability (#774818)
    
    Users will expect to see that copying of LUKS is available in the File
    System Support dialog, even if technically what is implemented is
    copying of the file system within an open encryption mapping.  There is
    no other reason to do this change as these two previous commits have
    fully enabled copying of encrypted content:
        Implement copy operation of encrypted file systems (#774814)
        Preview copy operation of encrypted file systems (#774818)
    
    Set LUKS .copy capability so that the dialog shows copying availability,
    but then disallow copying of closed LUKS.  (Checking for the capability
    and performing copying the content of an open LUKS encryption mapping is
    inherent in Win_GParted::set_valid_operations() and GParted_Core::copy()
    in the way that they access the block device containing the file system,
    whether encrypted or not).
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-11-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement copy operation of encrypted file systems (#774814)
    
    Implement the copy operation by making the copy code work with the
    Partition object directly containing the file system, instead of the
    enclosing PartitionLUKS object containing the LUKS encryption mapping.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Preview copy operation of encrypted file systems (#774818)
    
    Implement composing of the copy paste operation for encrypted file
    systems.
    
    Copying a closed LUKS partition would duplicate the LUKS header
    containing the UUID, passphrase and master encryption key.  From a
    security point of view having additional copies of encrypted data with
    the same master key is an extra risk, but it all depends on what is
    going to happen with that copy.  The Cryptsetup FAQ [1] talks about how
    to make a backup at the file system level and block level, preferring
    file system level with separate encryption if needed.  It strongly
    recommends separate encryption if the copy is removable or going
    off-site [2].  Also in the case of cloning the data, cloning the LUKS
    container is strongly discouraged [3].
    
    Therefore copying of encrypted file systems will be implemented by
    copying the file system inside an open LUKS encryption mapping and not
    by copying a closed LUKS partition.
    
    Also, while creating new LUKS encryption is not yet supported, copying
    an encrypted file system into a new partition will not be permitted as
    that will always decrypt the data.  An encrypted file system will be
    allowed to be copied into an existing plain partition, decrypting the
    data, or into an existing open encrypted partition, keeping it
    encrypted.  Pasting over the top of a closed encrypted partition will
    remove the LUKS encryption.  (This is planned to be removed when
    creating and removing LUKS encryption is implemented as part of full
    LUKS read-write support).
    
    Remember that when pasting into an existing partition the file system
    must fit within the available space and that encryption has overhead
    from the LUKS header.  Therefore copying from a plain partition into a
    partition of the same size with open an encryption mapping will not fit
    for space reasons.
    
    [1] The Cryptsetup FAQ, Backup and data Recovery section
    https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions
    
    [2] 6.7 Does a backup compromise security?
    "If you do network-backup or tape-backup, I strongly recommend to go the
    filesystem backup path with independent encryption, as you typically
    cannot reliably delete data in these scenarios, especially in a cloud
    setting."
    
    [3] 6.15 Can I clone a LUKS container?
    "You can, but it breaks security, because the cloned container has the
    same header and hence the same master key.  You cannot change the master
    key on a LUKS container, even if you change the passphrase(s), the
    master key stays the same. That means whoever has access to one of the
    clones can decrypt them all, completely bypassing the passphrases.
    
    The right way to do this is to first luksFormat the target container,
    then to clone the contents of the source container, with both containers
    mapped, i.e. decrypted.  You can clone the decrypted contents of a LUKS
    container in binary mode, although you may run into secondary issues
    with GUIDs in filesystems, partition tables, RAID-components and the
    like. These are just the normal problems binary cloning causes.
    
    Note that if you need to ship (e.g.) cloned LUKS containers with a
    default passphrase, that is fine as long as each container was
    individually created (and hence has its own master key). In this case,
    changing the default passphrase will make it secure again."
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bug checks into format operation methods (#774818)
    
    Ensure pre-condition of never being passed a Partition object containing
    an open LUKS encryption mapping is met for format operation related
    methods.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement format operation on encrypted file systems (#774818)
    
    Formatting an existing encrypted partition will format the file system
    within the encrypted mapping.  Formatting over the top of a closed
    encrypted partition will remove the encryption.  (The latter is planned
    to be prevented when creating and removing LUKS encryption is
    implemented as part of full LUKS read-write support).
    
    Composing the format operation inside an open LUKS encryption mapping
    also has to account for the size of that mapping and construct a
    PartitionLUKS object containing the new file system.  Implementing the
    operation itself is as simple as passing the Partition object directly
    containing the file system, instead of the outer PartitionLUKS object.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Extend functions generating encrypted file system string (#774818)
    
    Already have:
        Utils::get_filesystem_string(FS_EXT2)          -> "ext2"
        virtual Partition::get_filesystem_string()     -> "ext2"
        virtual PartitionLUKS::get_filesystem_string() -> "[Encrypted] ext2"
    Add these:
        Utils::get_encrypted_string()                  -> "[Encrypted]"
        Utils::get_filesystem_string(false, FS_EXT2)   -> "ext2"
        Utils::get_filesystem_string(true, FS_EXT2)    -> "[Encrypted] ext2"
    
    This is ready for use of Utils::get_filesystem_string(true, FS_EXT2)
    when composing the preview of a format of an encrypted file system by
    Win_GParted::activate_format().
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement mount/umount of encrypted file systems (#774818)
    
    Adapts the swapon/swapoff, activate/deactivate Volume Group and mount/
    unmount file system code to work with the Partition object directly
    containing the file system.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bug checks into check operation methods (#774818)
    
    Ensure pre-condition of never being passed a Partition object containing
    an open LUKS encryption mapping is met for check operation related
    methods.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement check operation on encrypted file systems (#774818)
    
    Just update the code describing and implementing the check operation.
    No need to update the code composing the operation in
    Win_GParted::activate_check() as that is incredibly simple, just cloning
    the Partition object and doesn't need changing.
    
    Note that for encrypted file systems this does:
    1) runs FSCK on the encrypted file system;
    2) grows the file system to fill the encrypted mapping.
    At this time it does not grow the encryption mapping to fill the
    partition.  That will be added after resize/move has been implemented.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bug checks into label file system operation methods (#774818)
    
    Ensure pre-condition of never being passed a Partition object containing
    an open LUKS encryption mapping is met for label file system operation
    related methods.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement label operation on encrypted file systems (#774818)
    
    Again, just need to change the code when composing, describing and
    implementing the operation to query and set the Partition object
    directly containing the file system, instead of the enclosing encryption
    mapping to make it work.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display encrypted path in the calibration step (#774818)
    
    For an encrypted file system the calibrate step now looks like:
    
        + calibrate /dev/sdb4
            path: /dev/sdb4 (partition)
            start: 6293504
            end: 8390655
            size: 2097152 (1.00 GiB)
            encryption path: /dev/mapper/sdb4_crypt
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add bug checks into change UUID operation methods (#774818)
    
    Ensure pre-condition of never being passed a Partition object containing
    an open LUKS encryption mapping is met for change UUID operation related
    methods.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement new UUID operation on encrypted file systems (#774818)
    
    When composing, describing and implementing the operation just need the
    code to query and set the Partition object directly containing the file
    system, instead of the enclosing encryption mapping to make it work.
    
    The operation details for setting a new UUID on an encrypted ext4 file
    system become:
    
        Set a new random UUID on [Encrypted] ext4 file system on /dev/sdb4
        + calibrate /dev/sdb4
        + Set UUID on /dev/mapper/sdb4_crypt to a new, random value
          + tune2fs -U random /dev/mapper/sdb4_crypt
              tune2fs 1.41.12 (17-May-2010)
    
    Also note the now documented rule in apply_operation_to_disk() which
    says each operation must leave the status of the encryption mapping and
    file system as it found it.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Provide virtual Partition::get_filesystem_string() method (#774818)
    
    Provide and use a single interface for getting the file system string
    for display, regardless of whether the partition is encrypted or the
    encryption mapping is active or not.
    
    Example return values for get_filesystem_string() for different types
    and states of Partition objects:
    1)  Plain ext4 file system:          -> "ext4"
    2)  Closed encrypted:                -> "[Encrypted]"
    3)  Open encrypted ext4 file system: -> "[Encrypted] ext4"
    
    This simplifies the code in TreeView_Detail::create_row() which sets the
    file system type displayed in the main window.  The same method will
    then also be used when setting the operation description as each
    operation is updated to handle encrypted file systems.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove virtual PartitionLUKS::get_filesystem_label() (#774818)
    
    The previous commit changed how the code behind the main window
    retrieved the file system label for display.  This is the relevant
    changes in TreeView_Detail::create_row():
    
      + const Partition & filesystem_ptn = partition.get_filesystem_partition();
        ...
      - Glib::ustring temp_filesystem_label = partition.get_filesystem_label();
      + Glib::ustring temp_filesystem_label = filesystem_ptn.get_filesystem_label();
        treerow[treeview_detail_columns.label] = temp_filesystem_label;
    
    In the case of an encrypted file system get_filesystem_label() is now
    called on the Partition object directly rather than on the outer
    Partition object containing the LUKS encryption.
    
    The code behind the Information dialog always obtained and used the
    Partition object directly containing the file system to call
    get_filesystem_label() since read-only LUKS support was added.
    Therefore the virtualised PartitionLUKS::get_filesystem_label() is no
    longer needed, so remove it.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-09-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Provide virtual Partition::get_filesystem_partition() method (#774818)
    
    There are multiple cases of code wanting to work with the Partition
    object directly containing the file system, regardless of whether it is
    within a PartitionLUKS object or not.  The code had to do something
    similar to this to access it:
    
        const Partition * filesystem_ptn = &partition;
        if ( partition.filesystem == FS_LUKS && partition.busy )
                filesystem_ptn = &dynamic_cast<const PartitionLUKS *>( &partition )->get_encrypted();
        ...
        // Access Partition object directly containing the file system
        filesystem_ptn-> ...
    
    Implement and use virtual accessor get_filesystem_partition() which
    allows the code to be simplified like this:
    
        const Partition & filesystem_ptn = partition.get_filesystem_partition();
        ...
        // Access Partition object directly containing the file system
        filesystem_ptn. ...
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2016-08-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display busy status of the file system within LUKS encryption (#774818)
    
    In the main window, display the busy status of the file system only
    according to whether it is mounted or not, ignoring the status of the
    encryption mapping.
    
    Bug 774818 - Implement LUKS read-write actions NOT requiring a
                 passphrase

2017-01-13  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2016-12-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure blkid FS_Info cache has entries for all whole disk devices (#771244)
    
    More recent versions of blkid don't report an ISO9660 file system on the
    whole disk device if partitions can be reports for embedded partitions.
    However when querying the whole disk device directly then the expected
    ISO9660 file system is reported.  For example on CentOS 7 with the
    previous ISO images:
    
        # wget http://git.kernel.org/cgit/utils/util-linux/util-linux.git/plain/tests/ts/isosize/sample.iso.gz
        # dd if=/dev/zero bs=1M of=/dev/sdc
        # zcat sample.iso.gz | dd of=/dev/sdc
    
        # blkid -v
        blkid from util-linux 2.23.2  (libblkid 2.23.0, 25-Apr-2013)
        # blkid | fgrep /dev/sdc
        /dev/sdc1: UUID="2013-01-04-22-05-45-00" LABEL="ARCH_201301" TYPE="iso9660" PTTYPE="dos"
        # blkid /dev/sdc
        /dev/sdc: UUID="2013-01-04-22-05-45-00" LABEL="ARCH_201301" TYPE="iso9660" PTTYPE="dos"
    
        # wget http://cdimage.debian.org/debian-cd/8.6.0/amd64/iso-cd/debian-8.6.0-amd64-netinst.iso
        # dd if=/dev/zero bs=1M of=/dev/sdc
        # dd if=debian-8.6.0-amd64-netinst.iso bs=1M of=/dev/sdc
    
        # blkid | fgrep /dev/sdc
        /dev/sdc1: UUID="2016-09-17-14-23-48-00" LABEL="Debian 8.6.0 amd64 1" TYPE="iso9660" PTTYPE="dos"
        /dev/sdc2: SEC_TYPE="msdos" UUID="17F3-1162" TYPE="vfat"
        # blkid /dev/sdc
        /dev/sdc: UUID="2016-09-17-14-23-48-00" LABEL="Debian 8.6.0 amd64 1" TYPE="iso9660" PTTYPE="dos"
    
    This behavioural difference with blkid is probably as a result of newer
    versions of udev informing the kernel of the partitions embedded within
    the ISO9660 image, and not directly as a result of a change in blkid
    itself.  Older distributions don't have partition entries for the above
    ISO images, but CentOS 7 (with udev 219) and later distributions do have
    partition entries:
    
        # fgrep sdc /proc/partitions
           8       16    8388608 sdc
           8       17     252928 sdc1
           8       18        416 sdc2
    
    Fix by ensuring that the blkid FS_Info cache has entries for whole disk
    devices, even if each entry has all empty attributes because there is a
    partition table and not a recognised file system.
    
    Calling blkid on whole disk devices containing partition tables produces
    output like this, with newer versions of blkid:
    
        # blkid /dev/sda
        /dev/sda: PTTYPE="dos"
        # blkid /dev/sdb
        /dev/sdb: PTTYPE="gpt"
    
    This will be loaded into the FS_Info cache as a blank entry for the
    device by run_blkid_load_cache().  There will be a path name but all the
    other attributes will be blank because there are no TYPE, SEC_TYPE, UUID
    or LABEL name value pairs.  With older versions of blkid no output is
    produced at all.  In that case load_fs_info_cache_extra_for_path() will
    create the same blank entry with just the path name defined.
    
    Bug 771244 - gparted does not recognize the iso9660 file system in
                 cloned Ubuntu USB boot drives

2016-12-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only read partition table after not finding a whole disk file system (#771244)
    
    ISO9660 images can contain embedded partitions which when encountered on
    whole disk drives causes libparted to report various warnings and
    errors.  For example on CentOS 6 with upgraded libparted 2.4 the
    following errors and warnings are encountered with various ISO images.
    (Deliberately using an older distribution with older blkid to avoid
    another issue with blkid addressed in the following patch).
    
    Libparted error message 1:
        # wget http://git.kernel.org/cgit/utils/util-linux/util-linux.git/plain/tests/ts/isosize/sample.iso.gz
        # dd if=/dev/zero bs=1M of=/dev/sdc
        # zcat sample.iso.gz | dd of=/dev/sdc
    
        # blkid -v
        blkid from util-linux-ng 2.17.2 (libblkid 2.17.0, 22-Mar-2010)
        # blkid | fgrep /dev/sdc
        /dev/sdc: LABEL="ARCH_201301" TYPE="iso9660"
    
        # ./gpartedbin /dev/sdc
        ======================
        libparted : 2.4
        ======================
        Invalid partition table - recursive partition on /dev/sdc.
    
        Libparted Error
        (-) Invalid partition table - recursive partition on /dev/sdc.
                                                 [ Cancel ] [ Ignore ]
    
    Libparted error message 2:
        # wget http://cdimage.debian.org/debian-cd/8.6.0/amd64/iso-cd/debian-8.6.0-amd64-netinst.iso
        # dd if=/dev/zero bs=1M of=/dev/sdc
        # dd if=debian-8.6.0-amd64-netinst.iso bs=1M of=/dev/sdc
    
        # blkid | fgrep /dev/sdc
        /dev/sdc: LABEL="Debian 8.6.0 amd64 1" TYPE="iso9660"
    
        # ./gpartedbin /dev/sdc
        ======================
        libparted : 2.4
        ======================
        /dev/sdc contains GPT signatures, indicating that it has a GPT
        table.  However, it does not have a valid fake msdos partition
        table, as it should.  Perhaps it was corrupted -- possibly by a
        program that doesn't understand GPT partition tables.  Or perhaps
        you deleted the GPT table, and are now using an msdos partition
        table.  Is this a GPT partition table?
    
        Libparted Warning
        /!\ /dev/sdc contains GPT signatures, indicating that it has a GPT
            table.  However, it does not have a valid fake msdos partition
            table, as it should.  Perhaps it was corrupted -- possibly by a
            program that doesn't understand GPT partition tables.  Or
            perhaps you deleted the GPT table, and are now using an msdos
            partition table.  Is this a GPT partition table?
                                                             [ Yes ] [ No ]
    
    These messages are because GParted is calling ped_disk_new() to attempt
    to read the partition table even before it has tried to recognise the
    ISO9660 file system on the whole disk drive.  Full call chain is:
        set_devices_thread()
            set_device_from_disk()
                get_device_and_disk()
                    get_disk()
                        ped_disk_new()
    
    Fix this by delaying the call to ped_disk_new() until after whole disk
    drive recognition has been performed.  Replace combined
    get_device_and_disk() with separate get_device() and only call
    get_disk() after no whole disk drive file system has been recognised.
    This is similar to how calibrate_partition() and
    erase_filesystem_signatures() are structured to also handle whole disk
    drive file systems.
    
    Bug 771244 - gparted does not recognize the iso9660 file system in
                 cloned Ubuntu USB boot drives

2016-12-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create new method GParted_Core::set_device_from_disk() (#771244)
    
    Move code from GParted_Core::set_devices_thread() performing top level
    population of each Device object during the scan of the drives into new
    set_device_from_disk() method.
    
    Bug 771244 - gparted does not recognize the iso9660 file system in
                 cloned Ubuntu USB boot drives

2016-10-06  Curtis Gedak <gedakc@gmail.com>

    Add detection of iso9660 file system (#771244)
    
    Requires blkid.
    
    Note that FS_LUKS was also moved to more closely match the order in
    include/Utils.h
    
    Bug 771244 - gparted does not recognize the iso9660 file system in
                 cloned Ubuntu USB boot drives

2016-12-16  Michał Górny <mgorny@gentoo.org>

    Include sys/sysmacros.h for major and minor macros (#776173)
    
    Glibc 2.25 is deprecating <sys/types.h> including <sys/sysmacros.h>.
        https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=dbab6577c6684c62bd2521c1c29dc25c3cac966f
        Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h>
    
    Building on Fedora Rawhide with Glibc 2.24.90 produces these warnings:
    
        BlockSpecial.cc:64:13: warning: In the GNU C Library, "major" is defined
         by <sys/sysmacros.h>. For historical compatibility, it is
         currently defined by <sys/types.h> as well, but we plan to
         remove this soon. To use "major", include <sys/sysmacros.h>
         directly. If you did not intend to use a system-defined macro
         "major", you should undefine it after including <sys/types.h>.
           m_major = major( sb.st_rdev );
                     ^~~~~~~~~~~~~~~~~~~~
    
        BlockSpecial.cc:65:13: warning: In the GNU C Library, "minor" is defined
         by <sys/sysmacros.h>. For historical compatibility, it is
         currently defined by <sys/types.h> as well, but we plan to
         remove this soon. To use "minor", include <sys/sysmacros.h>
         directly. If you did not intend to use a system-defined macro
         "minor", you should undefine it after including <sys/types.h>.
           m_minor = minor( sb.st_rdev );
                     ^~~~~~~~~~~~~~~~~~~~
    
    Code needing major and minor macros should include <sys/sysmacros.h>
    directly.  As both Glibc and musl-libc have always provided this header
    and GParted is a Linux only application, just always include the header
    and don't bother with an autoconf check for its existence.
    
    Bug 776173 - Missing sys/sysmacros.h #include, needed for experimental
                 glibc versions

2016-12-27  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2016-12-26  Bernd Homuth <dev@hmt.im>

    Update German translation

2016-12-26  Rafael Fontenelle <rafaelff@gnome.org>

    Update Brazilian Portuguese translation

2016-12-21  Daniel Mustieles <daniel.mustieles@gmail.com>

    Update Spanish translation

2016-12-18  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2016-12-17  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2016-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add lost "shrink file system" operation detail message (#775932)
    
    The details for a file system shrink operation look like this with the
    "shrink file system" message being missing:
    
        Shrink /dev/sdb1 from 128.00 MiB to 100.00 MiB
        + calibrate /dev/sdb1
        + check file system on /dev/sdb1 for errors and (if possible) fix them
          + e2fsck -f -y -v -C 0 /dev/sdb1
          + resize2fs -p /dev/sdb1 102400K
        + shrink partition from 128.00 MiB to 100.00 MiB
    
    This earlier commit [1] in the series dropped the message while moving
    code from resize_filesystem() to shrink_filesystem().  Re-add the
    message back.
    
    [1] a0158abbeb4b1116c26cfee65bd97c5063e54936
        Refactor resizing file system apply methods (#775932)
    
    Bug 775932 - Refactor mostly applying of operations

2016-12-16  Dušan Kazik <prescott66@gmail.com>

    Update Slovak translation

2016-12-12  Curtis Gedak <gedakc@gmail.com>

    Update help manual with additional partition flags (#776002)
    
    Also clarify legacy GRUB section regarding install to MBR or
    to partition.
    
    Bug 776002 - Update help with additional partition flags

2016-11-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Improve comment about disallowing shrinking when the FS usage is unknown
    
    Explain when and why shrinking file systems is disallowed.
    
    Unnecessary history.  Check added in 2004-12-15:
        d100935b55d44786c41f85f1c88bc7bdf14f2221
        :Set_Valid_Operations()
    
    Comment later added in 2006-07-30:
        677a21f50ade33dcd19e3438d63d5db53182db37
        improved errorhandling a bit. At the initialscan we store errors/warnings

2016-10-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop providing a default for FileSystem::resize() fill_partition argument
    
    FileSystem::resize() (and derived) is only ever called from a single
    location and always with the fill_partition argument supplied [1].
    Therefore providing a default for the argument is unnecessary.  So
    remove it.
    
    [1] Since these two commits from 2006-06-17, before GParted 0.3.0, which
        added resize_filesystem() and maximize_filesystem() methods to wrap
        calls to p_filesystem->resize() into a single location:
    
        08245cd08c5e89e68ac37d1f1271ce89300d3233
        cleanups in the core and the fs'es (resize)
    
        2d7fb5700be4da994ffc9b42785d897b79e1696c
        more cleanups in the core and the fs'es (these changelogs are getting

2016-10-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove "../include/" from GParted header #includes
    
    It made the code look a little messy, is easily resolved in the build
    system and made the dependencies more complicated than needed.  Each
    GParted header was tracked via multiple different names (different
    numbers of "../include/" prefixes).  For example just looking at how
    DialogFeatures.o depends on Utils.h:
    
        $ cd src
        $ make DialogFeatures.o
        $ egrep ' [^ ]*Utils.h' .deps/DialogFeatures.Po
         ../include/DialogFeatures.h ../include/../include/Utils.h \
         ../include/../include/../include/../include/../include/../include/Utils.h \
         ../include/../include/../include/Utils.h \
    
    After removing "../include/" from the GParted header #includes, just
    need to add "-I../include" to the compile command via the AM_CPPFLAGS in
    src/Makefile.am.  Now the dependencies on GParted header files are
    tracked under a single name (with a single "../include/" prefix).  Now
    DialogFeatures.o only depends on a single name to Utils.h:
    
        $ make DialogFeatures.o
        $ egrep ' [^ ]*Utils.h' .deps/DialogFeatures.Po
         ../include/DialogFeatures.h ../include/Utils.h ../include/i18n.h \

2016-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update LVM2 PV activate/deactivate check in set_valid_operations()
    
    Simplify conditions checking whether activate/deactivate of an LVM2 PV
    is possible.  Excluding extended partition type was unnecessary as it
    only matters that the file system type is LVM2 PV or not.
    
    Also remove activate/deactivate from the comment above as that check
    only determines if the busy state of file systems and swap space can be
    toggled.

2016-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor linux-swap recreation (#775932)
    
    Linux-swap is recreated as part of copy, resize and move operations and
    the code was special cased to implement that by calling the linux-swap
    specific resize method.  However the displayed text always said "growing
    file system" and then proceeded to recreate linux swap.  Example
    operation:
    
        Copy /dev/sdb1 to /dev/sdb2
        ...
        + copy file system from /dev/sdb1 to /dev/sdb2
            Partition copy action skipped because linux-swap file system does not contain data
        + grow file system to fill the partition
          + create new linux-swap file system
            + mkswap -L"" -U "77d939ef-54d6-427a-a2bf-a053da7eed4c" /dev/sdb2
                Setting up swapspace version 1, size = 262140 KiB
                LABEL=, UUID=77d939ef-54d6-427a-a2bf-a053da7eed4c
    
    Fix by writing recreate_linux_swap_filesystem() method with better
    messaging and use everywhere maximise_filesystem() was previously used
    to recreate linux-swap.  Also as this is a create step, erase the
    partition first to prevent the possibility of any other file system
    signatures being found afterwards.  Now the operation steps are more
    reflective of what is actually being performed.
    
        Copy /dev/sdb1 to /dev/sdb2
        ...
        + copy file system from /dev/sdb1 to /dev/sdb2
            Partition copy action skipped because linux-swap file system does not contain data
        + clear old file system signatures in /dev/sdb2
        + create new linux-swap file system
          + mkswap -L"" -U "77d939ef-54d6-427a-a2bf-a053da7eed4c" /dev/sdb2
              Setting up swapspace version 1, size = 262140 KiB
              LABEL=, UUID=77d939ef-54d6-427a-a2bf-a053da7eed4c
    
    Bug 775932 - Refactor mostly applying of operations

2016-10-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Properly check for file system online resize capabilities (#775932)
    
    Resizing a file system only checked the .grow and .shrink support
    capabilities of the file system, even when perform online resizing.
    This wasn't a issue because .online_grow and .online_shrink were always
    set from the offline .grow and .shrink capabilities respectively, but
    only when online resizing was possible.
    
    However the Device Mapper encryption mapping used for LUKS can only be
    resized when online, and not when offline.  Therefore the correct
    .online_grow and .online_shrink capabilities needs to be checked to
    prevent a LUKS resize step failing as not implemented.
    
    Bug 775932 - Refactor mostly applying of operations

2016-10-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor resizing file system apply methods (#775932)
    
    resize_filesystem() was meeting two different needs:
    1) when called with fill_partition = false it generated operation
       details;
    2) when called from maximize_filesystem() with fill_partition = true it
       skipped generating any operation details;
    then ran the switch statement to select the resize implementation.  So
    extract the common switch statement into new method
    resize_filesystem_implement().
    
    Then observe that the only time resize_filesystem() was called to grow
    the file system was when re-creating linux-swap.  Therefore change that
    call to use maximize_filesystem() and rename to shrink_filesystem() and
    modify the operation detail messages to match.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make copying and moving swap depend on mkswap availability (#775932)
    
    Attempting to copy or move linux-swap partition was possible when the
    mkswap command was unavailable.  However as linux-swap is re-created as
    part of these operations the mkswap command is a mandatory requirement.
    Example copy operation results:
    
        Copy /dev/sdb1 to /dev/sdb2
        + calibrate /dev/sdb1
        + check file system on /dev/sdb1 for errors and (if possible) fix them
        + create empty partition
        + set partition type on /dev/sdb2
        + copy file system from /dev/sdb1 to /dev/sdb2           [SUCCESS]
            Partition copy action skipped because linux-swap file system does not contain data
        + grow file system to fill the partition                 [WARNING]
            growing is not available for this file system
    
    Because mkswap was not available the grow action didn't re-create
    the linux-swap so the newly copied partition is left without any content
    and therefore reported as an unknown partition.
    
    Fix by making copying and moving linux-swap depend on mkswap being
    available.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename a few GParted_Core apply related methods (#775932)
    
    Make the methods called below apply_operation_to_disk() follow a
    standard naming convention:
    
     *  Contains "_partition"
        Uses libparted to query or change the partition in the disk label
        (partition table).
        E.g.:
            calibrate_partition()
            create_partition()
            delete_partition()
            name_partition()
            resize_move_partition()
            set_partition_type()
    
     *  Contains "_filesystem"
        Manipulates the file system within the partition, mostly using the
        FileSystem and derived class methods.
        E.g.:
            create_filesystem()
            remove_filesystem()
            label_filesystem()
            copy_filesystem()
            erase_filesystem_signatures()
            check_repair_filesystem()
            resize_filesystem()
            maximize_filesystem()
    
     *  Other
        Compound method calling multiple partition and file system related
        apply methods.
        E.g.:
            create()
            format()
            copy()
            resize_move()
            resize()
            move()
    
    Rename:
        Delete()      -> delete_partition()
        change_uuid() -> change_filesystem_uuid()
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Properly report specific move and resize errors as bugs (#775932)
    
    The initial check in each of GParted_Core::resize() and move() check for
    impossible conditions.  (See resize_move() where both functions are
    called for confirmation).  The old messages could have suggested the
    user somehow composed the operation incorrectly if they had ever been
    seen.
    
    Make it clear these failures are programming bugs, thus expecting the
    user to raise a bug report should they ever be seen.  While for now the
    checks are obviously impossible they document preconditions for the
    functions.  More precondition checks are expected to be added later.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor GParted_Core::move() (#775932)
    
    Simplify the move() function.  Change it into an if-operation-fails-
    return-false style and re-write the final overly complicated conditional
    check repair and maximise file system.
    
    The final condition said if the file system was linux-swap or the new
    partition was larger, perform a check repair and maximize file system.
    However this is a move only step with a check at the top of the move()
    function ensuring the Partition objects are the same size.  So that
    simplifies to only checking for linux-swap.  As the context is a move
    and linux-swap is recreated, performing a check repair first is
    unnecessary, so remove that too.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make resize_move_partition() skip whole disk device partitions (#775932)
    
    Make the logic at the resize_move_partition() call sites a little
    simpler by not having to avoid calling it for whole disk device
    partitions.  Make it a successful non-operation in that case.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make check_repair_filesystem() skip mounted file systems (#775932)
    
    Make the logic at the check_repair_filesystem() call sites a little
    easier by not having to avoid calling it for online file systems.  The
    function handles that itself as a silent non-operation.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make set_partition_type() skip whole disk device partitions (#775932)
    
    Make the logic at the set_partition_type() call sites a little simpler
    by not having to avoid calling it for whole disk device Partition
    objects.  Make set_partition_type() handle those itself as a silent
    non-operation.
    
    This is similar to how calibrate_partition() could be called on an
    UNALLOCATED Partition object, and update_bootsector() is called on
    non-NTFS file system Partition objects.  Both are successful and silent
    non-operations.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make encrypted Partition objects look like whole disk device ones (#775932)
    
    Until now an encryption mapping has been modelled as a Partition object
    similar to a partition like this:
        .encrypted.device_path  = "/dev/sdb1"
        .encrypted.path         = "/dev/mapper/sdb1_crypt"
        .encrypted.whole_device = false
        .encrypted.sector_start = // start of the mapping in the partition
        .encrypted.sector_end   = // end of the mapping in the partition
    However accessing device_path in the start to end sector range is not
    equivalent to accessing the partition path as it doesn't provide access
    to the encrypted data.  Therefore existing functions which read and
    write partition data (GParted file system copying and signature erasure)
    via libparted using the device_path won't work and will in fact destroy
    the encrypted data.  This could be coded around with an extra case in
    the device opening code, however it is not necessary.
    
    An encrypted block special device /dev/mapper/CRYPTNAME looks just like
    a whole disk device because it doesn't contain a partition and the file
    system it contains starts at sector 0 and goes to the end.  Therefore
    model an encryption mapping in the same way a whole disk device is
    modelled as a Partition object like this:
        .encrypted.device_path  = "/dev/mapper/sdb1_crypt"
        .encrypted.path         = "/dev/mapper/sdb1_crypt"
        .encrypted.whole_device = true
        .encrypted.sector_start = 0
        .encrypted.sector_end   = // size of the encryption mapping - 1
    Now GParted file system copy and erasure will just work without any
    change.  Just need to additionally store the LUKS header size, which was
    previous stored in the sector_start, for use in the
    get_sectors_{used,unused,unallocated}() calculations.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor GParted_Core::copy() (#775932)
    
    Split out the switch statement selecting the copy implementation and
    associated copy file system operation detail message into a separate
    copy_filesystem() method, matching how a number of other operations are
    coded.  This is why the previous copy_filesystem() methods needed
    renaming.
    
    Re-write the remaining copy() into if-operation-fails-return-false style
    to simplify it.  Re-write final complicated conditional check repair and
    maximise file system into separate positive if conditions for swap and
    larger partition to make it understandable.
    
    The min_size parameter to copy() was queried from the partition_src
    parameter also passed to copy().  Drop the parameter and query inside
    copy() instead.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename copy_filesystem() methods (#775932)
    
    Rename GParted_Core methods:
        copy_filesystem(4 params)  -> copy_filesystem_internal()
        copy_filesystem(5 params)  -> copy_filesystem_internal()
        copy_filesystem(10 params) -> copy_blocks()
    
    See the following commit for the desire to do this.
    
    Bug 775932 - Refactor mostly applying of operations

2016-11-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename file and class to CopyBlocks (#775932)
    
    Files were named Block_Copy and the class was named block_copy.  Change
    to the primary naming convention of CamelCase class name and matching
    file names.
    
    Also make CopyBlocks::copy_block() a private method as it is only used
    internally within the class.
    
    Bug 775932 - Refactor mostly applying of operations

2016-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor activate_mount_partition() and toggle_busy_state() (#775932)
    
    These two methods had a lot of repeated and common code.  Both determine
    if the partition has any pending operations, notify the user that
    changing the busy status can not be performed, and report any errors
    when changing the status.
    
    Extract the common code into sub-functions check_toggle_busy_allowed()
    and show_toggle_failure_dialog() to handle showing the message dialogs.
    Also refactor toggle_busy_state() to make it clear that it handles 5
    cases of swapon, swapoff, activate VG, deactivate VG and unmount file
    system.
    
    Also remove out of date comment near the top of toggle_busy_state()
    stating there can only be pending operations for inactive partitions is
    out of date.  Some file systems can be resized while online and
    partition naming is allowed whatever the busy status of the file system.
    
    Bug 775932 - Refactor mostly applying of operations

2016-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor Win_GParted::unmount_partition() (#775932)
    
    The primary reason to refactor unmount_partition() is to pass the
    Partition object to be unmounted, rather than use member variable
    selected_partition_ptr so that it doesn't have to handle the differences
    between encrypted and non-encrypted Partition objects.  The calling
    function can deal with that instead.  Then there were lots of small
    reasons to change almost every other line too:
    * Return success or failure rather than updating a passed pointer with
      the result.  Leftover from when the function used to be a separate
      thread:
          commit 52a2a9b00a32996921ace055e71d0e09fb33c5fe
          Reduce threading (#685740)
    * Pass updated error string by reference rather than by pointer.  Likely
      another leftover.
    * Stop borrowing the updated error string as a local variable for the
      error output from the umount command.  Use new umount_error local
      variable instead.  Was bad practice making the code harder to
      understand.
    * Rename failed_mountpoints to skipped_mountpoints to better reflect
      that it contains the mount points not attempted to be unmounted
      because two or more file systems are mounted at that point.
    * Rename errors to umount_errors to better reflect it contains the
      errors from each failed umount command.
    * Document the reason for mount points being skipped.
    * Update the skipped mount points message to state definitely why they
      could not be unmounted rather than stating most likely.
    * Simplify logic processing the error cases and return value.
    * Made static because it no longer accesses any class members.
    * Remove out dated "//threads.." comment from the header.  Another
      leftover from when the function use to be a separate thread.
    
    Bug 775932 - Refactor mostly applying of operations

2016-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add translatable files reminder to HACKING file

2016-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder and rename params to TreeView_Detail::load_partitions()
    
    Reorder the parameters into the same order in which they occur in the
    row, i.e. Name first, then Mount Point and finally Label.  Rename local
    variables in load_partitions(1 param) and parameters of
    load_partitions(5 params) prefixing with "show_" to make it clearer the
    variables track if that column will be displayed or not.

2016-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix detection of empty mount point column for encrypted file systems (#775475)
    
    create_row() populates the values for each row to be displayed in the UI
    from the relevant Partition object.  However load_partitions(5 params)
    independently decided if the Name, Mount Point and Label columns were
    empty and should be displayed.
    
    Getting the mount point value is more complex for encrypted file systems
    because it has to call get_mountpoints() on the inner encrypted
    Partition object.  load_partitions(5 params) didn't account for this.
    
    Fix by making create_row() both copy the values into each row and at the
    same time check if they are empty to decide if they should be displayed
    or not.
    
    Bug 775475 - Mount Point column displayed for encrypted file systems
                 even when empty

2016-10-19  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2016-10-19  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.27.0   ==========

2016-10-16  Inaki Larranaga Murgoitio <dooteo@zundan.com>

    Update Basque language

2016-10-16  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian translation

2016-10-14  Alan Mortensen <alanmortensen.am@gmail.com>

    Updated Danish translation

2016-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix slightly messed up comment in Win_GParted::on_show() (#771816)
    
    Bug 771816 - GParted never exits if the main window is closed before the
                 initial device load completes

2016-10-10  Sveinn í Felli <sv1@fellsnet.is>

    Update Icelandic translation

2016-09-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent the UI hanging while gpart data rescue is running (#772123)
    
    Running Device > Attempt Data Rescue... hangs the GParted UI for as long
    as gpart takes to scan the whole disk device looking for file system
    signatures.
    
    Originally when gpart support was added by commit [1] a separate thread
    was created to run gpart.  Then most threading was removed by commit [2]
    which left gpart running in the main thread blocking the UI.
    
    [1] ef37bdb7de1bbdc145aa40ae6e66a88e0e3e5ae9
        Added support to lost data recovery using gpart
    
    [2] 52a2a9b00a32996921ace055e71d0e09fb33c5fe
        Reduce threading (#685740)
    
    guess_partition_table() hand codes using Glib to run the gpart command
    asynchronously reading standard output, but it just doesn't run the Gtk
    main loop to process events, hence the UI hangs.  Instead just use
    Utils::execute_command() which handles everything already.  It runs the
    commands asynchronously, reading output and if being run in the main
    thread also calls the Gtk main loop to keep the UI responsive.
    
    Bug 772123 - GParted is unresponsive while gpart is running

2016-09-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make GParted exit when closed before the initial load completes (#771816)
    
    If the GParted main window is closed before the initial device load
    completed gpartedbin never exits.  The main window closes but the
    process sits there idle forever.  Subsequently running GParted reports
    this error:
        # gparted
        The process gpartedbin is already running.
        Only one gpartedbin process is permitted.
    
    If the user is running GParted from a desktop menu they will never see
    this error so they will never know why GParted won't start any more.
    
    More technically, it is if the main window is closed before the
    Win_GParted::on_show() callback completes.
    
    I assume the Gtk main loop doesn't setup the normal quit handling until
    the on_show() callback finishes drawing the main window for the first
    time.  Following this hint [1], move the initial device load from the
    on_show() callback to immediately after it completes by using a run once
    idle callback setup in on_show().
    
    This looks exactly the same to the user except now gpartedbin exits when
    the main window is closed during the initial device load.  Note that
    GParted finished the device load before exiting.  This is exactly the
    same as happens when exiting during subsequent device refreshes.
    
    [1] How to know when a Gtk Window is fully shown?
        http://stackoverflow.com/questions/14663212/how-to-know-when-a-gtk-window-is-fully-shown
    
        "If you want to know when your main window appears the first time,
        it is far easier (and saner) add a g_idle_add after your show_all
        call."
    
    Bug 771816 - GParted never exits if the main window is closed before the
                 initial device load completes

2016-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Line wrap file system status value in the Information dialog (#771693)
    
    Again this is to handle a long list of mount points for a single
    partition.  To prevent the file system status value of "Mounted on [list
    of 20 mount points]" causing the dialog to become wider than the screen,
    line wrap the text.  This instead makes the dialog taller, which already
    automatically scrolls vertically as needed.
    
    Bug 771693 - Mount Point column is wider than the screen on openSUSE
                 using btrfs root with lots of mounted subvolumes

2016-09-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Show too wide Mount Point column with ellipsis (#771693)
    
    openSUSE 42.1 with default btrfs root installation is heavily using
    subvolumes.  (Think of btrfs as a storage pool and subvolumes as
    individual file systems within the pool for a rough approximation).
    Thus the root partition is mounted on many mount points:
    
        # df -k
        Filesystem     1K-blocks    Used Available Use% Mounted on
        ...
        /dev/sda2       19445760 5820080  13157104  31% /
        /dev/sda2       19445760 5820080  13157104  31% /var/lib/libvirt/images
        /dev/sda2       19445760 5820080  13157104  31% /var/lib/mysql
        /dev/sda2       19445760 5820080  13157104  31% /.snapshots
        /dev/sda2       19445760 5820080  13157104  31% /home
        /dev/sda2       19445760 5820080  13157104  31% /var/opt
        /dev/sda2       19445760 5820080  13157104  31% /usr/local
        /dev/sda2       19445760 5820080  13157104  31% /var/tmp
        /dev/sda2       19445760 5820080  13157104  31% /var/lib/named
        /dev/sda2       19445760 5820080  13157104  31% /var/lib/mariadb
        /dev/sda2       19445760 5820080  13157104  31% /var/spool
        /dev/sda2       19445760 5820080  13157104  31% /var/lib/pgsql
        /dev/sda2       19445760 5820080  13157104  31% /var/lib/mailman
        /dev/sda2       19445760 5820080  13157104  31% /srv
        /dev/sda2       19445760 5820080  13157104  31% /opt
        /dev/sda2       19445760 5820080  13157104  31% /var/crash
        /dev/sda2       19445760 5820080  13157104  31% /tmp
        /dev/sda2       19445760 5820080  13157104  31% /boot/grub2/i386-pc
        /dev/sda2       19445760 5820080  13157104  31% /var/log
        /dev/sda2       19445760 5820080  13157104  31% /boot/grub2/x86_64-efi
    
    As the Mount Point column contains all 20 mount points it makes the
    column wider than the screen, requiring lots of horizontal scrolling to
    see the following columns.  (Truncated to just 7 mounts in this
    example here).
    
        Partition     | File System | Mount Point
          /dev/sda1 * | # swap      |
          /dev/sda2 * | # btrfs     | /, /.snapshots, /boot/grub2/i386-pc, /boot/grub2/x86_64-efi, /home, /opt, /srv
    
    Fix by making the Mount Point column resizable and display truncated
    text with ellipsis.  The column now takes the initial and minimum width
    from the width of the "Mount Point" column header text.
    
        Partition     | File System | Mount Point     |   Size
          /dev/sda1 * | # swap      |                 |  1.45 GiB
          /dev/sda2 * | # btrfs     | /, /.snapsho... | 18.54 GiB
    
    Bug 771693 - Mount Point column is wider than the screen on openSUSE
                 using btrfs root with lots of mounted subvolumes

2016-09-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove remaining vestiges of coloured text from the partition list
    
    This commit stopped setting the text colours in the Partition, File
    System and Mount Point columns to avoid hard coding text colours making
    them impossible to read when using GNOME's High Contrast Inverse theme:
        ff2a6c00dd0790257f5d044b2e53dc5b60dc5f17
        Changes post gparted-0.3.6 - code recreation from Source Forge
    
        * src/TreeView_Detail.cc: Removed text_color hard coding
          - Removed hard coding of Partition and Filesystem text_color
            which was based on if partition was TYPE_UNALLOCATED.
          - Removed hard coding of Mount text_color which was based
            on if partition was busy.  Lock symbol provides this indicator.
          - Closes GParted bug #413810 - Don't hardcode text colour in
            partition list
    
    Now remove the remaining vestiges left behind.  Remove the unused color
    text and mount_text_color columns from the tree model.  Also remove
    setting of the column attributes which set the colour of the text in the
    tree view from those unused columns in the tree model.
    
    Unnecessary history.  Added by:
        b179990dc97c800567dd385aaffcfe992772012a
        show greyed-out mountpoint of unmounted partitions in the treeview
        as an improved way to identify partitions
        Bug #333027 -  Displaying unmounted partitions' default mount points
        in grey
    
    and by commit only in CVS history:
        Bart Hakvoort <...> 2004-08-22 15:06:45
        Made text in Partition column darkgrey for unallocated. this offers
        more visual difference between partitions and unallocated space

2016-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Include extended partitions in the count of active partitions
    
    Trying to create a new partition table on a device with active
    partitions reports the number of active partitions in the error dialog.
    However when there is a busy logical partition the number of reported
    busy partitions will be one less than the number of partitions in the
    main UI showing the busy symbol.
    
    GParted considers extended partitions as busy when any of the logical
    partitions it contains as busy.  Display in the main UI reflects this.
    
    Fix Win_GParted::active_partitions_on_device_count() to not exclude
    extended partitions from the count.

2016-10-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix BlockSpecial comparison (#771670)
    
    Found that in some cases usage of active encrypted swap was not working,
    but only for the first encrypted swap partition.  This only failed on
    the first Device Mapper device, dm-0:
    
        # ls -l /dev/mapper/ /dev/dm-*
        brw-rw---- 1 root disk 254, 0 Oct  4 20:58 /dev/dm-0
        brw-rw---- 1 root disk 254, 1 Oct  4 20:58 /dev/dm-1
    
        /dev/mapper/:
        total 0
        crw------- 1 root root 10,236 Oct  4 19:48 control
        lrwxrwxrwx 1 root root      7 Oct  4 20:58 sdb1_crypt -> ../dm-0
        lrwxrwxrwx 1 root root      7 Oct  4 20:58 sdb2_crypt -> ../dm-1
    
        # cat /proc/swaps
        Filename                        Type        Size    Used    Priority
        /dev/sda1                       partition   1524732 92356   -1
        /dev/dm-0                       partition   1046524 0       -2
        /dev/dm-1                       partition   1046524 0       -3
    
    Was failing because the minor number of dm-0 was 0, causing BlockSpecial
    operator==() to fall back to name comparison rather than major, minor
    number, and GParted name /dev/mapper/sdb1_crypt doesn't match /dev/dm-0.
    
    Found on openSUSE and Ubuntu which don't use LVM by default and don't
    already have dm-0 used as an LVM Logical Volume which GParted doesn't
    support.
    
    The LINUX ALLOCATED DEVICES document [1] says block special device 0, 0
    (major, minor) is not used "reserved as null device number".   (Not to
    be confused with 1, 3 /dev/null the Null device).  All other
    non-negative pairs are valid block special device numbers.  Therefore
    update BlockSpecial operator==() accordingly; compare by major, minor
    number when either is greater than 0 falling back to string compare
    otherwise.  This still fits in with the BlockSpecial() constructor using
    major, minor numbers 0, 0 to represent plain files.
    
    [1] LINUX ALLOCATED DEVICES
        https://www.kernel.org/doc/Documentation/devices.txt
    
    Bug 771670 - Usage of active encrypted swap is not shown

2016-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement usage reporting of active encrypted swap partitions (#771670)
    
    GParted does not show the usage of active encrypted swap partitions,
    instead showing partition warning "Unable to read the contents of this
    file system! ...".  OS setup:
    
        # ls -l /dev/mapper/sdb4_crypt /dev/dm-3
        brw-rw----. 1 root disk 253, 3 Sep 14 07:26 /dev/dm-3
        lrwxrwxrwx. 1 root root      7 Sep 14 07:26 /dev/mapper/sdb4_crypt -> ../dm-3
        # mkswap -L encrypted_swap /dev/mapper/sdb4_crypt
        # swapon /dev/mapper/sdb4_crypt
        # cat /proc/swaps
        Filename                        Type        Size    Used    Priority
        /dev/sda2                       partition   2097148 237632  -1
        /dev/dm-3                       partition   1046524 0       -2
    
    This is because the code was performing a string compare between the
    canonical /dev/mapper/sdb4_crypt name GParted is using and the /dev/dm-3
    name reported by the kernel via /proc/swaps.  Fix by creating
    BlockSpecial objects from the names and compare those so that comparison
    is done correctly using major, minor numbers.
    
    Bug 771670 - Usage of active encrypted swap is not shown

2016-10-04  gogo <trebelnik2@gmail.com>

    Updated Croatian translation

2016-10-03  gogo <trebelnik2@gmail.com>

    Updated Croatian translation

2016-09-30  Daniel Șerbănescu <daniel@serbanescu.dk>

    Updated Romanian translation

2016-09-22  gogo <trebelnik2@gmail.com>

    Added Croatian translation

2016-09-20  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Updated Swedish translation

2016-09-20  David King <amigadave@amigadave.com>

    Update British English translation

2016-09-20  GNOME Translation Robot <gnome-sysadmin@gnome.org>

    Updated British English translation

2016-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove left behind typedef GParted_Core::MountMapping
    
    Left behind by:
        63ec73dfdac70fde8fabb543d0a7dc5808e168d5
        Split mount_info and fstab_info maps into separate Mount_Info module

2016-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove out of date comment from the end of set_devices_thread()
    
    The comment became completely unnecessary with the transfer of
    mount_info and fstab_info into separate Mount_Info module by commit:
        63ec73dfdac70fde8fabb543d0a7dc5808e168d5
        Split mount_info and fstab_info maps into separate Mount_Info module
    
    It was never necessary to clear one of the mappings at the end of the
    device refresh because it was reloaded at the start of the next device
    refresh anyway and it is only a small amount of memory.

2016-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop showing duplicate mount points for unmounted encrypted file systems (#771323)
    
    Have an unmounted file system within an open encrypted mapping and an
    entry in /etc/fstab for the file system like this:
    
        # lsblk
        NAME           MAJ:MIN RM   SIZE RO TYPE   MOUNTPOINT
        ...
        sdb              8:16   0     8G  0 disk
        +-sdb1           8:17   0     1G  0 part
          +-sdb1_crypt 253:0    0  1022M  0 crypt
        # blkid | grep sdb1
        /dev/sdb1: TYPE="crypto_LUKS" ...
        /dev/mapper/sdb1_crypt: TYPE="ext4" ...
        # ls -l /dev/mapper/sdb1_crypt /dev/dm-0
        brw-rw----. 1 root disk 253, 0 Sep 12 19:09 /dev/dm-0
        lrwxrwxrwx. 1 root root      7 Sep 12 19:09 /dev/mapper/sdb1_crypt -> ../dm-0
        # grep sdb1 /etc/fstab
        /dev/mapper/sdb1_crypt   /mnt/1   ext4   defaults    0 0
    
    The mount point will be shown twice for the partition:
        /mnt/1, /mnt/1
    
    This is because add_node_and_mountpoint() adds two entries for both the
    symbolic and real block special names:
        map["/dev/mapper/sdb1_crypt"] = ["/mnt/1"]
        map["/dev/dm-0"]              = ["/mnt/1"]
    This was needed for the old code which used string compare to match
    block devices so that the mount point could be looked up by either name.
    However since bug 767842 introduced major, minor number comparison it
    became unnecessary.  As both names refer to the same device the mount
    point gets added twice to the same entry.  Hence display of the double
    mount.
        map[BlockSpecial{"/dev/mapper/sdb1_crypt", 253, 0}] =
                                                        ["/mnt/1", "/mnt/1"]
    
    It is always going to be the case that the symbolic link and real block
    special names have the same major, minor numbers.  That was the
    requirement of the BlockSpecial class and the reason for using stat() to
    lookup the numbers.  Therefore adding entries for both names will always
    add duplicate entries.  Fix by stop using realpath() to lookup the real
    name and adding the duplicate entry.
    
    Introduced by:
        a800ca8b68d60251101ee27e569dfa2a97b67886
        Add BlockSpecial into mount_info and fstab_info (#767842)
    
    Bug 771323 - GParted is showing duplicate mount points for unmounted
                 encrypted file systems

2016-09-13  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2016-09-09  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2016-09-04  Jiri Grönroos <jiri.gronroos@iki.fi>

    Updated Finnish translation

2016-09-04  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2016-08-21  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2016-08-20  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2016-08-15  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2016-07-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove no longer needed includes from GParted_Core.cc
    
    No longer needed since commit:
        504eb04ddc6f2fddfa942f63823a9dc5334e5815
        Roll back (remove) code to recognize /dev/mapper/* devices, because ...

2016-07-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Split mount_info and fstab_info maps into separate Mount_Info module
    
    The GParted_Core::mount_info and GParted_Core::fstab_info maps and the
    methods that manipulate them are self-contained.  Therefore move them to
    a separate Mount_Info module and reduce the size of the monster
    GParted_Core slightly.

2016-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unimplemented prototype DMRaid::partition_is_mounted_by_path()

2016-07-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to static class interface for FS_Info
    
    The FS_Info module has a pseudo multi-object interface and used the
    constructor to load the cache.  However all the data in the class is
    static.  An FS_Info object doesn't contain any member variables, yet was
    needed just to call the member functions.
    
    Make all the member functions static removing the need to use any
    FS_Info objects and provide an explicit load_cache() method.

2016-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify whole device matching in load_proc_partitions_Info_cache()
    
    Following earlier commit "Pre-populate BlockSpecial cache while reading
    /proc/partitions (#767842)" load_proc_partitions_info_cache() has
    extracted just the name field from each line of /proc/partitions.
    Therefore simplify the regular expressions matching each type of whole
    disk device to just matching in the name field rather than matching in
    the whole line.

2016-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to a static interface for Proc_Partitions_Info
    
    The Proc_Partitions_Info has a pseudo multi-object interface and uses
    the constructor to load the cache.  However all the data in the class is
    static.  A Proc_Partitions_Info object doesn't contain any member
    variables, yet was needed just to call the member functions.
    
    Make all the member functions static removing the need to use any
    Proc_Partitions_Info objects and provide and explicit load_cache()
    method.

2016-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove remaining use of retired vol_id
    
    Vol_id has been retired and removed from all supported distributions.
    See earlier commit "Remove use of retired vol_id from FS_Info module
    (#767842)" for more details.  Therefore remove it's use from GParted
    entirely.

2016-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pre-populate BlockSpecial cache while reading /proc/partitions (#767842)
    
    GParted is already reading /proc/partitions to get whole disk device
    names.  The file also contains the major, minor device number of every
    partition.  Use this information to pre-populate the cache in the
    BlockSpecial class.
    
        # cat /proc/partitions
        major minor  #blocks  name
    
           8        0   20971520 sda
           8        1     512000 sda1
           8        2   20458496 sda2
        ...
           9        3    1047552 md3
         259        2     262144 md3p1
         259        3     262144 md3p2
        ...
         253        0   18317312 dm-0
         253        1    2097152 dm-1
         253        2    8383872 dm-2
         253        3    1048576 dm-3
    
    Note that for Device-Mapper names (dm-*) the kernel is not using the
    canonical user space names (mapper/*).  There is no harm in
    pre-populating the cache with these names and will help if tools report
    them too.  It is just that for DMRaid, LVM and LUKS, GParted uses the
    canonical /dev/mapper/* names so will still have to call stat() once for
    each such name.
    
    For plain disks (sd*) and Linux Software RAID arrays (md*) the kernel
    name is the common user space name too, therefore matches what GParted
    uses and pre-populating does avoid calling stat() at all for these
    names.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Cache looked up major, minor numbers in BlockSpecial class (#767842)
    
    Creation of every BlockSpecial object used to result in a stat() OS
    call.  On one of my test VMs debugging with 4 disks and a few partitions
    on each, GParted refresh generated 541 calls to stat() in the
    BlockSpecial(name) constructor.  However there were only 45 unique
    names.  So on average each name was stat()ed approximately 12 times.
    
    Cache the major, minor number associated with each name after starting
    with a cleared cache for each GParted refresh.  This reduces these
    direct calls to stat() to just the 45 unique names.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use BlockSpecial in FS_Info module cache (#767842)
    
    The FS_Info cache is loaded from "blkid" output and compares block
    special names.  Therefore switch to using BlockSpecial objects so that
    comparisons are performed by the major, minor device number instead.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Parse FS_Info cache into fields while loading (#767842)
    
    FS_Info module caches the output from blkid as a single string and uses
    regular expressions to find the line matching the requested block
    special file name.  This is not compatible with using BlockSpecial
    objects to represent block special files, and perform matching by major,
    minor device number.  Therefore parse the blkid output into a vector of
    structures containing the needed fields, ready for switching to
    BlockSpecial objects in the following patch.
    
    Interface to the module remains unchanged.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove use of retired vol_id from FS_Info module (#767842)
    
    Vol_id was removed from udev 142, released 2009-05-13, and udev switched
    to using blkid instead [1].  All currently supported distributions use
    later versions of udev (or systemd after the udev merge), except for
    RedHat / CentOS 5 with udev 095.  However RedHat / CentOS 5 does provide
    blkid and vol_id is found in udev specific /lib/udev directory not on
    the PATH.  Therefore effectively vol_id is not available on any
    supported distribution and blkid is always available.  Therefore remove
    use of vol_id from the FS_Info module.  Less code to refactor and test
    in following changes.
    
    [1] delete vol_id and require util-linux-ng's blkid
        http://git.kernel.org/cgit/linux/hotplug/udev.git/commit/?id=f07996885dab45102492d7f16e7e2997e264c725
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use BlockSpecial in SWRaid_Info module cache (#767842)
    
    The SWRaid_Info cache is loaded from "mdadm" command output and
    /proc/mdstat file.  It contains the member name which is used to access
    the cache, therefore switch to using BlockSpecial objects so that
    comparison is performed using the major, minor device number.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use BlockSpecial in LUKS_Info module cache (#767842)
    
    The LUKS_Info module cache is loaded from "dmsetup" command and compares
    block special files, therefore switch to using BlockSpecial objects so
    that comparisons are performed by major, minor device number.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-07-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Overload is_dev_mounted() function (#767842)
    
    Small optimisation which avoids constructing an extra BlockSpecial
    object when determining if a btrfs member is mounted.  Rather than
    extracting the name from the BlockSpecial object in
    btrfs::get_mount_device() and re-constructing another BlockSpecial
    object from that name in GParted_Core::is_dev_mounted(), pass the
    BlockSpecial object directly.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use BlockSpecial objects in btrfs member cache (#767842)
    
    There are no known errors which affect the remaining caches in GParted.
    However those caches which compare block special devices will be changed
    to use BlockSpecial objects so comparison is by major, minor device
    number rather than by name.
    
    Change btrfs member cache loaded from "btrfs filesystem show" output to
    use BlockSpecial objects.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add BlockSpecial into mount_info and fstab_info (#767842)
    
    On some distributions having btrfs on top of LUKS encrypted partitions,
    adding a second device and removing the first device used to mount the
    file system causes GParted to no longer be able to report the file
    system as busy or the mount points themselves.
    
    For example, on CentOS 7, create a single btrfs file system and mount
    it.  The provided /dev/mapper/sdb1_crypt name is reported, via
    /proc/mounts, as the mounting device:
        # cryptsetup luksFormat --force-password /dev/sdb1
        # cryptsetup luksOpen /dev/sdb1 sdb1_crypt
        # mkfs.btrfs -L encrypted-btrfs /dev/mapper/sdb1_crypt
        # mount /dev/mapper/sdb1_crypt /mnt/1
    
        # ls -l /dev/mapper
        total 0
        lrwxrwxrwx. 1 root root       7 Jul  2 14:15 centos-root -> ../dm-1
        lrwxrwxrwx. 1 root root       7 Jul  2 14:15 centos-swap -> ../dm-0
        crw-------. 1 root root 10, 236 Jul  2 14:15 control
        lrwxrwxrwx. 1 root root       7 Jul  2 15:14 sdb1_crypt -> ../dm-2
        # fgrep btrfs /proc/mounts
        /dev/mapper/sdb1_crypt /mnt/1 btrfs rw,seclabel,relatime,space_cache 0 0
    
    Add a second device to the btrfs file system:
        # cryptsetup luksFormat --force-password /dev/sdb2
        # cryptsetup luksOpen /dev/sdb2 sdb2_crypt
        # btrfs device add /dev/mapper/sdb2_crypt /mnt/1
    
        # ls -l /dev/mapper
        ...
        lrwxrwxrwx. 1 root root       7 Jul  2 15:12 sdb2_crypt -> ../dm-3
        # btrfs filesystem show /dev/mapper/sdb1_crypt
        Label: 'encrypted-btrfs'  uuid: 45d7b1ef-820c-4ef8-8abd-c70d928afb49
                Total devices 2 FS bytes used 32.00KiB
                devid    1 size 1022.00MiB used 12.00MiB path /dev/mapper/sdb1_crypt
                devid    2 size 1022.00MiB used 0.00B path /dev/mapper/sdb2_crypt
    
    Remove the first mounting device from the btrfs file system.  Now the
    non-canonical name /dev/dm-3 is reported, via /proc/mounts, as the
    mounting device:
        # btrfs device delete /dev/mapper/sdb1_crypt /mnt/1
    
        # btrfs filesystem show /dev/mapper/sdb2_crypt
        Label: 'encrypted-btrfs'  uuid: 45d7b1ef-820c-4ef8-8abd-c70d928afb49
                Total devices 1 FS bytes used 96.00KiB
                devid    2 size 1022.00MiB used 144.00MiB path /dev/mapper/sdb2_crypt
        # fgrep btrfs /proc/mounts
        /dev/dm-3 /mnt/1 btrfs rw,seclabel,relatime,space_cache 0 0
        # ls -l /dev/dm-3
        brw-rw----. 1 root disk 253, 3 Jul  2 15:12 /dev/dm-3
    
    GParted loads the mount_info mapping from /proc/mounts and with it the
    /dev/dm-3 name.  When GParted is determining if the encrypted btrfs file
    system is mounted or getting the mount points it is using the
    /dev/mapper/sdb2_crypt name.  Therefore no information is found and the
    file system is incorrectly reported as unmounted.
    
    Fix by changing mount_info and fstab_info to use BlockSpecial objects
    instead of strings so that matching is performed by major, minor device
    numbers rather than by string compare.  Note that as BlockSpecial
    objects are used as the key of std::map [1] mappings operator<() [2]
    needs to be provided to order the key values.
    
    [1] std::map
        http://www.cplusplus.com/reference/map/map/
    [2] std::map::key_comp
        http://www.cplusplus.com/reference/map/map/key_comp/
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create BlockSpecial class and use in LVM2_PV_Info (#767842)
    
    In some cases creating an LVM2 Physical Volume on top of a DMRaid array
    reports no usage information and this partition warning:
        Unable to read the contents of this file system!
        Because of this some operations may be unavailable.
        The cause might be a missing software package.
        The following list of software packages is required for lvm2
        pv file system support: lvm2.
    
    For example on Ubuntu 14.04 LTS (with GParted built with
    --enable-libparted-dmraid) create an LVM2 PV in a DMRaid array
    partition.  GParted uses this command:
        # lvm pvcreate -M 2 /dev/mapper/isw_bacdehijbd_MyArray0p2
    
    But LVM reports the PV having a different name:
        # lvm pvs
          PV                                                VG   Fmt  Attr PSize PFree
          /dev/disk/by-id/dm-name-isw_bacdehijbd_MyArray0p2      lvm2 a--  1.00g 1.00g
    
    This alternate name is loaded into the LVM2_PV_Info module cache.  Hence
    when GParted queries partition /dev/mapper/isw_bacdehijbd_MyArray0p2 it
    has no PV information against that name and reports unknown usage.
    
    However they are actually the same block special device; major 252,
    minor 2:
        # ls -l /dev/mapper/isw_bacdehijbd_MyArray0p2
        brw-rw---- 1 root disk 252, 2 Jul  2 11:09 /dev/mapper/isw_bacdehijbd_MyArray0p2
    
        # ls -l /dev/disk/by-id/dm-name-isw_bacdehijbd_MyArray0p2
        lrwxrwxrwx 1 root root 10 Jul  2 11:09 /dev/disk/by-id/dm-name-isw_bacdehijbd_MyArray0p2 -> ../../dm-2
        # ls -l /dev/dm-2
        brw-rw---- 1 root disk 252, 2 Jul  2 11:09 /dev/dm-2
    
    To determine if two names refer to the same block special device their
    major, minor numbers need to be compared, instead of string comparing
    their names.
    
    Implement class BlockSpecial which encapsulates the name and major,
    minor numbers for a block special device.  Also performs comparison as
    needed.  See bug 767842 comments 4 and 5 for further investigation and
    decision for choosing to implement a class.
    
    Replace name strings in the LVM2_PV_Info module with BlockSpecial
    objects performing correct block special device comparison.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now unused Proc_Partitions_Info::get_alternate_paths() (#767842)
    
    Now Device and Partition objects only have a single path,
    get_alternate_paths() is never called.  Remove the method and population
    of the private alternate_paths_cache member that went with it.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Partition::add_path() to set_path() (#767842)
    
    To reflect that there is now only a single path in the Partition object
    now.  Also get rid of the now unneeded optional clear_paths parameter
    which was only relevant when there was a vector of paths.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update calibrate_partition() for single partition path (#767842)
    
    Now that Partition objects only have a single path, rather than a list
    of paths, stop performing unnecessary actions in calibrate_partitions()
    which added alternate paths reported from libparted.  Just left with
    setting the partition path name correctly, when the path name doesn't
    exist.  Happens when the path is set to "Copy of /dev/SRC" when the
    partition was newly created by a copy-paste into unallocated space
    earlier in the sequence of operations now being applied.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify Partition object to a single path (#767842)
    
    Change from a vector of paths to a single path member in the Partition
    object.  Remove add_paths() and get_paths() methods.  Keep add_path()
    and get_path().
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Device::add_path() to set_path() (#767842)
    
    To reflect that there is only a single path in the Device object now.
    Also get rid of the now unneeded optional parameter which was only
    relevant when there was a vector of paths.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify Device object to a single path (#767842)
    
    Background
    
    GParted stored a list of paths for Device and Partition objects.  It
    sorted this list [1][2] and treated the first specially as that is what
    get_path() returned and was used almost everywhere; with the file system
    specific tools, looked up in various *_Info caches, etc.
    
    [1] Device::add_path(), ::add_paths()
    [2] Partition::add_path(), ::add_paths()
    
    Mount point display [3] was the only bit of GParted which really worked
    with the path list.  Busy file system detection [4] just used the path
    provided by libparted, or for LUKS /dev/mapper/* names.  It checked that
    single path against the mounted file systems found from /proc/mounts,
    expanded with additional block device names when symlinks were
    encountered.
    
    [3] GParted_Core::set_mountpoints() -> set_mountpoints_helper()
    [4] GParted_Core::set_device_partitions() -> is_busy()
        GParted_Core::set_device_one_partition() -> is_busy()
        GParted_Core::set_luks_partition() -> is_busy()
    
    Having the first path, by sort order, treated specially by being used
    everywhere and virtually ignoring the others was wrong, complicated to
    remember and difficult code with.  As all the additional paths were
    virtually unused and made no difference, remove them.  The "improved
    detection of mountpoins, free space, etc.." benefit from commit [5]
    doesn't seem to exist.  Therefore simplify to a single path for Device
    and Partition objects.
    
    [5] commit 6d8b169e734e1ecb191d5164689f24400010a7b4
        changed the way devices and partitions store their device paths.
        Instead of holding a 'realpath' and a symbolic path we store paths
        in a list.  This allows for improved detection of mountpoins, free
        space, etc..
    
    This patch
    
    Simplify the Device object from a vector of paths to a single path.
    Remove add_paths() and get_paths() methods.  Keep add_path() and
    get_path() for now.
    
    Bug 767842 - File system usage missing when tools report alternate block
                 device names

2016-08-04  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2016-07-21  Piotr Drąg <piotrdrag@gmail.com>

    Add Language headers to po files
    
    Future versions of gettext will fail if this header is missing.

2016-07-08  Andika Triwidada <atriwidada@gnome.org>

    Updated Indonesian translation

2016-07-04  Tiago Santos <tiagofsantos81@sapo.pt>

    Updated Portuguese translation

2016-06-30  Natanael Copa <ncopa@alpinelinux.org>

    Fix sscanf modifier for long long (#768239)
    
    POSIX says that %lld is the modifier for long long.
    http://pubs.opengroup.org/onlinepubs/9699919799/functions/fscanf.html
    
    This fixes wrong sizes with musl libc.
    
    Bug 768239 - sizes are wrong with musl libc due to use of non-standard
                 sscanf "%Ld" modifier

2016-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise GRUB2 core.img (#766989)
    
    Recognise GRUB2 core.img boot code written to a partition without a file
    system.  Such setups are possible/likely with GPT partitioned disks as
    there is a specific partition type reserved for it [1][2]:
        21686148-6449-6E6F-744E-656564454649  (BIOS Boot partition)
    
    [1] GUID Partition Table, Partition types
        https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs
    
    [2] BIOS boot partition
        https://en.wikipedia.org/wiki/BIOS_boot_partition
    
    Bug 766989 - zfsonline support - need file system name support for ZFS
                 type codes

2016-06-13  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2016-06-13  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.26.1   ==========

2016-06-13  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2016-06-11  GNOME Translation Robot <gnome-sysadmin@gnome.org>

    Updated Scottish Gaelic translation

2016-06-10  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2016-06-09  A S Alam <aalam@users.sf.net>

    Completed Punjabi Translation

2016-06-09  Daniel Șerbănescu <daniel@serbanescu.dk>

    Updated Romanian translation

2016-06-08  A S Alam <aalam@users.sf.net>

    updated Punjabi Translation

2016-06-07  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2016-06-07  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2016-06-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent assert failure from OperationDelete::get_partition_new() (#767233)
    
    Composing these operations caused GParted to abort on an assert failure:
    (1) Delete an existing partition,
    (2) Create a new partition,
    (3) Delete new partition.
    
    This is the equivalent issue as fixed in the previous commit, except with
    the delete operation rather than the check operation:
        Prevent assert failure from OperationCheck::get_partition_new() (#767233)
    
        # ./gpartedbin
        ======================
        libparted : 2.4
        ======================
        **
        ERROR:OperationDelete.cc:41:virtual GParted::Partition& GParted::OperationDelete::get_partition_new(): assertion failed: (false)
        Aborted (core dumped)
    
        # gdb ./gpartedbin core.19232 --batch --quiet --ex backtrace -ex quit
        [New Thread 19232]
        [New Thread 19234]
        [Thread debugging using libthread_db enabled]
        Core was generated by `./gpartedbin'.
        Program terminated with signal 6, Aborted.
        #0  0x000000361f2325e5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
        64    return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
        #0  0x000000361f2325e5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
        #1  0x000000361f233dc5 in abort () at abort.c:92
        #2  0x0000003620a67324 in g_assertion_message (domain=<value optimized out>, file=<value optimized out>, line=<value optimized out>, func=0x50fcc0 "virtual GParted::Partition& GParted::OperationDelete::get_partition_new()", message=0x1b55f60 "assertion failed: (false)") at gtestutils.c:1358
        #3  0x0000003620a678f0 in g_assertion_message_expr (domain=0x0, file=0x50fa68 "OperationDelete.cc", line=41, func=0x50fcc0 "virtual GParted::Partition& GParted::OperationDelete::get_partition_new()", expr=<value optimized out>) at gtestutils.c:1369
        #4  0x000000000049aa0d in GParted::OperationDelete::get_partition_new (this=0x1b321b0) at OperationDelete.cc:41
        #5  0x00000000004c6700 in GParted::Win_GParted::activate_delete (this=0x7ffc91403670) at Win_GParted.cc:2068
        ...
    
    As before the crash is happened in Win_GParted::activate_delete() as it
    was going through the list of operations removing those which applied to
    the never created partition.  It came across the delete operation of an
    existing partition and called get_partition_new().  As partition_new was
    not set or used by the delete operation this asserted false and crashed
    GParted.
    
    Unlike the check operation case, the delete operation doesn't have a
    partition afterwards.  (As GParted represents unallocated space with
    partition objects then the delete operation could be populated with a
    new partition by constructing the correctly merged unallocated space
    partition object, but that is what OperationDelete::apply_to_visual()
    does and having a place holder doesn't seem like the right thing to do).
    Instead exclude delete operations, on existing partitions, when looking
    for operations applying to this not yet created partition as they are
    mutually exclusive.
    
    Bug 767233 - GParted core dump on assert failure in
                 OperationDelete::get_partition_new()

2016-06-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent assert failure from OperationCheck::get_partition_new() (#767233)
    
    Composing these operations caused GParted to abort on an assert failure:
    (1) Check an existing partition,
    (2) Create a new partition,
    (3) Delete new partition.
    
        # ./gpartedbin
        ======================
        libparted : 2.4
        ======================
        **
        ERROR:OperationCheck.cc:40:virtual GParted::Partition& GParted::OperationCheck::get_partition_new(): assertion failed: (false)
        Aborted (core dumped)
    
        # gdb ./gpartedbin core.8876 --batch --quiet --ex backtrace -ex quit
        [New Thread 8876]
        [New Thread 8879]
        [Thread debugging using libthread_db enabled]
        Core was generated by `./gpartedbin'.
        Program terminated with signal 6, Aborted.
        #0  0x000000361f2325e5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
        64    return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
        #0  0x000000361f2325e5 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
        #1  0x000000361f233dc5 in abort () at abort.c:92
        #2  0x0000003620a67324 in g_assertion_message (domain=<value optimized out>, file=<value optimized out>, line=<value optimized out>, func=0x50f400 "virtual GParted::Partition& GParted::OperationCheck::get_partition_new()", message=0x1d37a00 "assertion failed: (false)") at gtestutils.c:1358
        #3  0x0000003620a678f0 in g_assertion_message_expr (domain=0x0, file=0x50f1a8 "OperationCheck.cc", line=40, func=0x50f400 "virtual GParted::Partition& GParted::OperationCheck::get_partition_new()", expr=<value optimized out>) at gtestutils.c:1369
        #4  0x0000000000498e21 in GParted::OperationCheck::get_partition_new (this=0x1d1bb30) at OperationCheck.cc:40
        #5  0x00000000004c66ec in GParted::Win_GParted::activate_delete (this=0x7fff031c3e30) at Win_GParted.cc:2068
        ...
    
    When Win_GParted::activate_delete() was stepping through the operation
    list removing operations (2 & 3 in the above recreation steps) which
    related to the new partition never to be created it called
    get_partition_new() on all operations in the list.  This included
    calling get_partition_new() on the check operation (1 in the above
    recreation steps).  As partition_new was not set or used by the check
    operation get_partition_new() asserted false and crashed GParted.
    
    Fix by populating the partition_new member in OperationCheck objects,
    thus allowing get_partition_new() to be called on the object.  As a
    check operation doesn't change any partition boundaries or file system
    attributes, just duplicate the new partition from the original
    partition.
    
    Bug 767233 - GParted core dump on assert failure in
                 OperationDelete::get_partition_new()

2016-05-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only enable ext4 64bit feature when required (#766910)
    
    E2fsprogs version 1.43 always creates 64bit ext4 file systems by default
    [1][2] regardless of the partition size.  Previously it only enabled the
    64bit feature when required on ext4 volumes 16 TiB and larger.  Also
    note that RHEL / CentOS 7 always create 64bit ext4 file systems by
    default from e2fsprogs 1.42.9 [3].
    
    (At least some versions of) Grub 2 and syslinux boot loaders don't work
    with 64bit ext4 file systems [4][5][6].  For maximum boot loader
    compatibility make GParted implement what mke2fs previously did, only
    setting the 64bit feature on volumes 16 TiB and larger and clearing it
    otherwise.  Only applied to mkfs.ext4 version 1.42 and later.
    
    [1] Release notes, E2fsprogs 1.43 (May 17, 2016)
        http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.43
    
        "Mke2fs will now create file systems with the metadata_csum and
        64bit features enabled by default".
    
    [2] http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/commit/?id=cd27af3ecb83e8fd1e3eaa14994284a1818c7c15
        mke2fs: enable the metadata_csum and 64bit features by default
    
    [3] Comment 20 and 21 in Red Hat bug 1099237
        https://bugzilla.redhat.com/show_bug.cgi?id=1099237#c20
    
        "..., is rhel7 default behavior w.r.t. 64 bit really different from
        upstream ?
    
        Yes it is. This is what we have in RHEL7:
        Patch6: e2fsprogs-1.42.9-enable-64bit-feature-by-default.patch
        it fixed this bz: https://bugzilla.redhat.com/show_bug.cgi?id=982871
        and this is upstream proposal:
        http://www.spinics.net/lists/linux-ext4/msg42294.html"
    
    [4] Grub 2 not working on Slackware with 64bit EXT4
        http://www.linuxquestions.org/questions/slackware-14/grub-mkconfig-error-in-slackware-current-64-bit-4175580544/
    
    [5] Syslinux not working on Slackware with 64bit EXT4
        http://www.linuxquestions.org/questions/slackware-14/slackware64-current-5-20-2016-syslinux-booting-and-ext4-formatting-4175580324/
    
    [6] Syslinux not working on RHEL 7 with 64bit EXT4
        Bug 1099237 - rhel7 ext4 defaults to 64 bit, which extlinux can't reliably read
        https://bugzilla.redhat.com/show_bug.cgi?id=1099237
    
    Bug 766910 - Multiple boot loaders don't work on 64bit EXT4 file systems

2016-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't limit ext4 volume size when 64bit feature is available (#766910)
    
    E2fsprogs 1.42 adds ext4 64bit feature [1] allowing volume sizes larger
    than 16 TiB.  However only enable large volumes from e2fsprogs 1.42.9
    when a large number of 64bit bugs were fixed [2].  (Also RHEL / CentOS 7
    use e2fsprogs 1.42.9 and always enable 64bit feature by default).
    
    [1] Release notes, E2fsprogs 1.42 (November 29, 2011)
        http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.42
    
        "This release of e2fsprogs has support for file systems > 16TB.
        Online resize requires kernel support which will hopefully be in
        Linux version 3.2.  Offline support is not yet available for > 16TB
        file systems, but will be coming".
    
    [2] Release notes, E2fsprogs 1.42.9 (December 28, 2013)
        http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.42.9
    
        "Fixed a large number of bugs in resize2fs, e2fsck, debugfs, and
        libext2fs to correctly handle bigalloc and 64-bit file systems.
        There were many corner cases that had not been noticed in previous
        uses of these file systems, since they are not as common.  Some of
        the bugs could cause file system corruption or data loss, so users
        of 64-bit or bigalloc file systems are strongly urged to upgrade to
        e2fsprogs 1.42.9".
    
    Bug 766910 - Multiple boot loaders don't work on 64bit EXT4 file systems

2016-05-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Limit maximum ext2/3/4 volume size to just less than 16 TiB (#766910)
    
    Maximum size of an ext2/3/4 volume is 2^32 - 1 blocks [1], ignoring ext4
    with 64bit feature.  That is just under 16 TiB with a 4K block size.
    
        # truncate -s 16T /mnt/1/sparse.img
        # ls -l /mnt/1/sparse.img
        -rw-r--r--. 1 root root 17592186044416 May 28 19:33 /mnt/1/sparse.img
        # losetup /dev/loop0 /mnt/1/sparse.img
        # mkfs.ext3 /dev/loop0
        mke2fs 1.43 (17-May-2016)
        mkfs.ext3: Size of device (0x100000000 blocks) /dev/loop0 too big to be expressed
                in 32 bits using a blocksize of 4096.
        # losetup -d /dev/loop0
        #
        #
        # truncate -s $((16*1024**3-4))K sparse.img
        # ls -l /mnt/1/sparse.img
        -rw-r--r--. 1 root root 17592186040320 May 28 19:51 /mnt/1/sparse.img
        # losetup /dev/loop0 /mnt/1/sparse.img
        # mkfs.ext3 /dev/loop0
        mke2fs 1.43 (17-May-2016)
        Discarding device blocks: done
        Creating filesystem with 4294967295 4k blocks and 536870912 inodes
        Filesystem UUID: 9721d8d9-8711-499b-aae4-8ea4d9e16ca2
        Superblock backups stored on blocks:
                32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
                4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
                102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
                2560000000, 3855122432
    
        Allocating group tables: done
        Writing inode tables: done
        Creating journal (32768 blocks): done
        Writing superblocks and filesystem accounting information: done
    
        # losetup -d /dev/loop0
        # rm /mnt/1/sparse.img
    
    Actually limit the maximum volume size to 1 MiB less than 16 TiB for
    coding reasons explained in the FIXME comment.
    
    [1] Ext4 Disk Layout, Blocks
        https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Blocks
    
    Bug 766910 - Multiple boot loaders don't work on 64bit EXT4 file systems

2016-05-30  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2016-05-30  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2016-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop leaking PedGeometry object memory (#767009)
    
    Calling libparted ped_geometry_new() creates a new PedGeometry object
    from malloced memory, however the corresponding ped_geometry_destroy()
    is never called to destroy the object and free the memory.
    
    Perform a resize of a FAT file system when running GParted under
    valgrind identifies several memory blocks leaked via ped_geometry_new()
    from resize_move_filesystem_using_libparted().  One such example:
    
        # valgrind --track-origins=yes --leak-check=full ./gpartedbin
        ...
        ==32069== 32 bytes in 1 blocks are definitely lost in loss record 5,419 of 11,542
        ==32069==    at 0x4C29BFD: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
        ==32069==    by 0x8ECD8C5: ped_malloc (libparted.c:231)
        ==32069==    by 0x8ED23C1: ped_geometry_new (geom.c:79)
        ==32069==    by 0x4764F3: GParted::GParted_Core::resize_move_filesystem_using_libparted(GParted::Partition const&, GParted::Partition const&, GParted::OperationDetail&) (GParted_Core.cc:2666)
        ==32069==    by 0x478007: GParted::GParted_Core::resize_filesystem(GParted::Partition const&, GParted::Partition const&, GParted::OperationDetail&, bool) (GParted_Core.cc:2990)
        ==32069==    by 0x478440: GParted::GParted_Core::maximize_filesystem(GParted::Partition const&, GParted::OperationDetail&) (GParted_Core.cc:3037)
        ==32069==    by 0x4769A0: GParted::GParted_Core::resize(GParted::Partition const&, GParted::Partition const&, GParted::OperationDetail&) (GParted_Core.cc:2746)
        ==32069==    by 0x47582B: GParted::GParted_Core::resize_move(GParted::Partition const&, GParted::Partition&, GParted::OperationDetail&) (GParted_Core.cc:2457)
        ==32069==    by 0x46DDB2: GParted::GParted_Core::apply_operation_to_disk(GParted::Operation*) (GParted_Core.cc:767)
        ...
    
    There is also a leak of a PedGeometry object from
    resize_move_partition().  Fix by calling ped_geometry_destroy() to
    delete all the allocated PedGeometry objects and free the memory.
    
    Bug 767009 - PedGeometry objects are memory leaked

2016-05-25  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Updated Swedish translation

2016-05-21  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2016-05-21  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Updated Swedish translation

2016-05-21  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2016-05-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove outdated comment fragment from activate_mount_partition()
    
    Outdated by commit:
        6e97a63f49016ea6b0b48f37aedb10fe6ec808bb
        Always use blkid file system detection before libparted (#757781)

2016-05-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace whole path list after calibrate in apply_operation_to_disk() (#766349)
    
    When replacing the list of paths for the other partition object involved
    in either a Resize/Move or Format operation in apply_operation_to_disk()
    should replace the whole list of partitions not just replace with the
    first path.  Copy the whole path list is the correct action.  It makes
    no material difference because secondary partition paths are only used
    to discover mount points during refresh phase and not at the apply
    phase, where only the primary path is used.
    
    Bug 766349 - Resolve code ugliness with partition path getting set to
                 "copy of /dev/SRC"

2016-05-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop relying on sort order when adding real paths in calibrate (#766349)
    
    Quoting the relevant comments from GParted_Core::calibrate_partition():
        Re-add the real partition path from libparted.
    
        When creating a copy operation by pasting into unallocated space the
        list of paths for the partition object was set to
        ["Copy of /dev/SRC"] because the partition didn't yet exist before
        the operations were applied.  Additional operations on that new
        partition also got the list of paths set to ["Copy of /dev/SRC"].
        This re-adds the real path to the start of the list making it
        ["/dev/NEW", "Copy of /dev/SRC"].  This provides the real path for
        file system specific tools used during those additional operations
        such mkfs for the format operation or fsck and others for the
        resize/move operation.
    
        FIXME: Having this work just because "/dev/NEW" happens to sort
        before "Copy of /dev/SRC" is ugly!  Probably have a separate display
        path which can be changed at will without affecting the list of real
        paths for the partition.
    
    Having a separate display path is overly complicated and unnecessary.
    Just replace the list of paths with the real one reported by libparted
    if it contained "Copy of /dev/SRC", determined by checking if the file
    exists.  Otherwise continue to add the libparted name as an alternate
    path.  Whole disk devices can never be named "Copy of /dev/SRC" because
    they are not partitioned so never created or deleted by GParted, only
    ever written to, hence don't need the extra exists test logic.
    
    Bug 766349 - Resolve code ugliness with partition path getting set to
                 "copy of /dev/SRC"

2016-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop overriding real path when pasting into existing partitions (#766349)
    
    When composing a copy operation it always named the destination
    partition as "copy of /dev/SRC".  For the case of pasting into
    unallocated space creating a new partition this was the right thing to
    do as the partition doesn't yet exist so the path is not yet known.
    However for the case of pasting into an existing partition the path is
    known and replacing it with "copy of /dev/SRC" is wrong.  No other
    operation when operating on an existing partition changes it path.
    
    Given a set of existing partitions, sdb1 to sdb4, compose a set of copy
    operations as: copy sdb1 to sdb2, copy sdb2 to sdb3 and copy sdb3 to
    sdb4.  The displayed partitions before being applied become:
        /dev/sdb1
        copy of /dev/sdb1
        copy of copy of /dev/sdb1
        copy of copy of copy of /dev/sdb1
    And the pending operations are named:
        Copy /dev/sdb1 to /dev/sdb2
        Copy copy of /dev/sdb1 to /dev/sdb3
        Copy copy of copy of /dev/sdb1 to /sev/sdb4
    
    This is perverse.  In the case of pasting into an existing partition
    keep the real path name.  This keeps the partitions being displayed as:
        /dev/sdb1
        /dev/sdb2
        /dev/sdb3
        /dev/sdb4
    And the pending operations named as:
        Copy /dev/sdb1 to /dev/sdb2
        Copy /dev/sdb2 to /dev/sdb3
        Copy /dev/sdb3 to /dev/sdb4
    Much more understandable.
    
    Also switch to an upper case "C" in "Copy of /dev/SRC" as the temporary
    path name when pasting into unallocated space.  Finally update the
    comment in calibrate_partition() to describe the remaining cases when
    re-adding the path is still required.
    
    Bug 766349 - Resolve code ugliness with partition path getting set to
                 "copy of /dev/SRC"

2016-05-17  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2016-04-26  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2016-04-26  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.26.0   ==========

2016-04-22  Daniel Șerbănescu <daniel@serbanescu.dk>

    Updated Romanian translation

2016-04-19  Sveinn í Felli <sv1@fellsnet.is>

    Updated Icelandic translation

2016-04-19  Cédric Valmary <cvalmary@yahoo.fr>

    Updated Occitan translation

2016-04-19  Rafael Fontenelle <rafaelff@gnome.org>

    Updated Brazilian Portuguese translation

2016-04-19  Rafael Fontenelle <rafaelff@gnome.org>

    Updated Brazilian Portuguese translation

2016-04-19  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2016-04-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add symbolic constants SETTLE_DEVICE_*_MAX_WAIT_SECONDS
    
    Make the code a little more self documenting by adding the symbolic
    constants:
        SETTLE_DEVICE_APPLY_MAX_WAIT_SECONDS
        SETTLE_DEVICE_PROBE_MAX_WAIT_SECONDS
    which highlight that settle_device() is called in two different
    contexts, device probe and apply operations, with two different timeout
    values.

2016-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Wait for udev to recreate /dev/PTN entries when calibrating (#762941)
    
    File system specific commands sometimes fail reporting that the
    partition specific /dev entry doesn't exist.  Example failing check
    operation details:
    
        Check and repair file system (ext4) on dev/sdb4
          calibrate /dev/sdb4
            path: /dev/sdb4 (partition)
            start: 4196352
            end: 6293503
            size: 2097152 (1.00 GiB)
          check file system on /dev/sdb4 for errors and (if possible) fix them
            e2fsck -f -y -bv -C 0 /dev/sdb4
              e2fsck 1.42.9 (28-Dec-2013)
              e2fsck: No such file or directory while trying to open /dev/sdb4
              Possibly non-existent device?
    
    This has been reproduced on CentOS 7.  Debugging shows that the
    libparted calls used to re-read the partition details in
    GParted_Core::calibrate_partition() leads to udev removing and re-adding
    all the partition /dev entries for the disk.
    
        # udevadm monitor &
        # gpartedbin
        ...
         16.480662 +12.618659 calibrate_partition()          calling get_device("/dev/sdb", lp_device) ...
         16.483644 +0.002982 calibrate_partition()          get_device() returned
         16.483678 +0.000034 calibrate_partition()          calling get_disk(lp_device, lp_disk) ...
         16.618113 +0.134435 calibrate_partition()          get_disk() returned
        KERNEL[19275.707968] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
         16.618561 +0.000448 destroy_device_and_disk()      calling ped_disk_destroy(lp_disk) ...
         16.618584 +0.000023 destroy_device_and_disk()      ped_disk_destroy() returned
         16.618591 +0.000007 destroy_device_and_disk()      calling ped_device_destroy(lp_disk) ...
         16.618602 +0.000011 destroy_device_and_disk()      ped_device_destroy() returned
         16.618687 +0.000085 calibrate_partition()          return true
         16.618851 +0.000164 execute_command()              e2fsck -f -y -v -C 0 /dev/sdb4
        KERNEL[19275.708389] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        KERNEL[19275.708500] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        KERNEL[19275.708643] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        KERNEL[19275.768278] change   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb (block)
        KERNEL[19275.771171] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        KERNEL[19275.771360] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        KERNEL[19275.771542] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        KERNEL[19275.775858] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        UDEV  [19275.820153] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        UDEV  [19275.823152] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        UDEV  [19275.828275] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
         16.742735 +0.123884 execute_command()              exit status 8
        UDEV  [19275.841425] remove   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
        UDEV  [19275.905478] change   /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb (block)
        UDEV  [19276.013580] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 (block)
        UDEV  [19276.034728] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb4 (block)
        UDEV  [19276.174840] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb1 (block)
        UDEV  [19276.237105] add      /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 (block)
    
    So exactly when GParted is running the external e2fsck command, udev is
    in the middle of removing and re-adding all the /dev partition entries
    for the disk.  Hence the above failure reporting that /dev/sdb4 didn't
    exist.  This error depends on the timing between GParted running the
    external file system specific command and udev removing and re-adding
    the entries, so sometimes it works and sometimes it fails.
    
    Further debugging showed that simply opening and closing the whole disk
    device read-write triggers the same removing and re-adding of all the
    partition /dev entries with udev >= 219.  Opening the whole disk device
    read-write is what libparted has always done until this post
    libparted 3.2 patch to make it open read-only when probing:
    
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=44d5ae0115c4ecfe3158748309e9912c5aede92d
        libparted: Use read only when probing devices on linux (#1245144)
    
    To fix this simply wait for udev devices to settle in
    calibrate_partitions().  The longest I have seen udev take to do this is
    0.80 seconds in a VM.  Wait up to 10 seconds as is done in commit() ->
    commit_to_os(), also called when applying operations.
    
    On configurations which don't have this issue execution of udevadm
    settle, which will return immediately, adds at most 0.1 seconds to the
    time taken for the calibrate step.  This won't be noticed in the time
    taken of the operation details so there is no point in trying to avoid
    executing udevadm settle when not needed.
    
    Bug 762941 - Operations sometimes failing with: No such file or
                 directory

2016-04-17  Γιάννης Κουτσούκος <giankoyt@gmail.com>

    Updated Greek translation

2016-04-13  Stas Solovey <whats_up@tut.by>

    Updated Russian translation

2016-04-11  Cédric Valmary <cvalmary@yahoo.fr>

    Updated Occitan translation

2016-03-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Minor tidyup in load_proc_partitions_info_cache()
    
    Minor issues:
    1) In the while loop reading from /proc/partitions into variable line,
       just after the sscanf() call the variable was re-purposed to hold the
       device name making the code unnecessarily hard to follow.
    2) Variable c_str was a fixed sized buffer holding the device name read
       from /proc/partitions.
    3) Variable c_str name provides no meaning as to what data it holds.
    4) Return value from all the Utils::regexp_label() calls is converted
       from Glib::ustring to std::string to be stored in device variable.
    
    Resolve by using Utils::regexp_label() to extract the device name from
    each line in /proc/partitions and store in the variable device, already
    used for this purpose and now changed to type Glib::ustring.

2016-03-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use realpath() safely (#764369)
    
    realpath(3) manual page says:
    
        BUGS
            The POSIX.1-2001 standard version of this function is broken by
            design, since it is impossible to determine a suitable size for
            the output buffer, resolved_path.  According to POSIX.1-2001 a
            buffer of size PATH_MAX suffices, but PATH_MAX need not be a
            defined constant, and may have to be obtained using pathconf(3).
            And asking pathconf(3) does not really help, since, on the one
            hand POSIX warns that the result of pathconf(3) may be huge and
            unsuitable for mallocing memory, and on the other hand
            pathconf(3) may return -1 to signify that PATH_MAX is not
            bounded.  The resolved_path == NULL feature, not standardized in
            POSIX.1-2001, but standardized in POSIX.1-2008, allows this
            design problem to be avoided.
    
    The resolved_path == NULL feature of realpath() has existed as a Glibc
    extension since realpath() was first added to Glibc 1.90, released in
    June 1996.  Therefore it can be used unconditionally.
    
        https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=fa0bc87c32d02cd81ec4d0ae00e0d943c683e6e1
    
    Bug 764369 - Use realpath() safely

2016-04-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace 32-bit member variable "index" with wider local variables (#764658)
    
    The previous commit (Fix crash reading NTFS usage when there is no
    /dev/PTN entry) identified that the FileSystem member variable "index"
    is too small on 64-bit machines.  Also this member variable stores no
    FileSystem class information and was being used as a local variable.
    
    Replace with local variables of the of the correct type, wide enough to
    store the npos not found value.
    
    Bug 764658 - GParted crashes when reading NTFS usage when there is no
                 /dev/PTN entry

2016-04-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix crash reading NTFS usage when there is no /dev/PTN entry (#764658)
    
    On a 64-bit distribution, with an NTFS file system in a partition
    without a /dev entry then GParted will crash when attempting to read
    the file system usage.  Not having a /dev entry for the partition is
    rare and only known to occur for the disk devices used within Fake RAID
    (dmraid) arrays, and then only on Ubuntu 12.04 LTS.  Other/newer
    distributions do create /dev entries for partitions found on disk
    devices within Fake RAID arrays.
    
    Create mirror Fake RAID array:
        # dmraid -f isw -C MyArray --type 1 --disk /dev/sdc,/dev/sdd
        # dmraid -ay
    
    Create NTFS partition on the Fake RAID array.  On refresh GParted
    crashes:
        # ./gpartedbin
        (gpartedbin:590): glibmm-ERROR **:
        unhandled exception (type std::exception) in signal handler:
        what: basic_string::assign
    
    Without a /dev/sdc1 device entry the ntfsresize command reports this:
        # ntfsresize --info --force --no-progress-bar /dev/sdc1
        ntfsresize v2015.3.14 (libntfs-3g)
        ERROR(2): Failed to check '/dev/sdc1' mount state: No such file or directory
        Probably /etc/mtab is missing. It's too risky to continue. You might try
        an another Linux distro.
    
    The problem code in ntfs::set_used_sectors():
        145         index = output.find( "Cluster size" );
        146         if ( index == output.npos ||
        147              sscanf( output.substr( index ).c_str(), "Cluster size       : %Ld", &S ) != 1 )
    As "Cluster size" did not exist in the output find() returned the not
    found token of string::npos [1], which in a 64-bit environment is
    represented by 2^64-1 [2].  However it was saved in the variable index
    of type unsigned integer, which is only a 32-bit integer, thus
    truncating it to 2^32-1.  Therefore the comparison failed and sscanf()
    tried to parse the output starting at offset 2^32-1 which resulted in
    the crash.
    
    Introduced by commit:
        324d99a172848e4ff3fb7eb189f490bb4e6c53e5
        Record file system block size where known (#760709)
    
    Fix by following the same pattern of the other comparisons in
    ntfs::set_used_sectors() which checks if index is less than the output
    length.
    
    References:
    [1] std::string::find
        http://www.cplusplus.com/reference/string/string/find/
    [2] std::string::npos
        http://www.cplusplus.com/reference/string/string/npos/
    (Note that Glib::ustring is derived from std::string in the Standard C++
    library and provides a compatible interface).
    
    Bug 764658 - GParted crashes when reading NTFS usage when there is no
                 /dev/PTN entry

2016-04-06  YunQiang Su <yqsu@src.gnome.org>

    Update zh_CN translation

2016-04-06  Shi Jing <jingshi@ubuntukylin.com>

    Update zh_CN translation

2016-04-05  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2016-03-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable C++11 compilation when using libsigc++ 2.5.1 and later (#758545)
    
    As with glibmm [1] the latest versions of libsigc++ also uses ISO C++
    2011 features.  The NEWS file [2] says:
    
        2.5.1 (unstable):
    
        * Use (and require) C++11
          (Kjell Ahlstedt)
        * Using C++11 lambda functions to create sigc::slots:
          Avoid the need for SIGC_FUNCTORS_DEDUCE_RESULT_TYPE_WITH_DECLTYPE.
          (Kjell Ahlstedt)
    
    Without enabling C++11 compiler features, compilation of GParted with
    libsigc++ 2.5.1 and later fails with errors such as theses:
    
        /usr/include/sigc++-2.0/sigc++/trackable.h:40:3: warning: identifier 'noexcept' is a keyword in C++11 [-Wc++0x-compat]
           trackable_callback(void* data, func_destroy_notify func) noexcept
           ^
    
    [1] d6d7cb2bbf2fc381b890f63bbbf626eacfc8cdf8
        Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
    
    [2] libsigc++ 2.5.1 NEWS file
        https://git.gnome.org/browse/libsigcplusplus/tree/NEWS?h=2.5.1
    
    Bug 758545 - gparted-0.24.0 fails to build with gnome 3.18 mm packages
                 (on Gentoo)

2016-03-28  Muhammet Kara <muhammetk@gmail.com>

    Updated Turkish translation

2016-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Limit FAT32 maximum volume size to 2 TiB
    
    GParted is allowing creation of a FAT32 formatted partition of any size.
    However with a 512 byte sector size the maximum volume size of a FAT32
    file system is reported to be 2 TiB.
    * Wikipedia: File Allocation Table / FAT32
      https://en.wikipedia.org/wiki/File_Allocation_Table#FAT32
      "The boot sector uses a 32-bit field for the sector count, limiting
      the FAT32 volume size to 2 TB for a sector size of 512 bytes and 16 TB
      for a sector size of 4,096 bytes."
    * Microsoft: Default cluster size for NTFS, FAT, and exFAT / Default
      cluster sizes for FAT32
      https://support.microsoft.com/en-us/kb/140365
    
    Trying to create a FAT32 file system in a partition larger than 2 TiB
    results in unallocated space being left after the file system.
    
    Nuances:
    [1] Larger sector sizes allow larger maximum volume sizes up to 16 TiB
        with 4096 byte sectors.
    [2] mkdosfs/mkfs.fat has an -S SECTOR_SIZE option which allows changing
        the "logical" sector size of the file system allowing the maximum
        volume to be proportionally increased.
    [3] mkfs.fat appears to have an signed overflow bug when the size of the
        partition is larger than maximum signed 32-bit integer of logical(?)
        sectors.  (2 TiB for a sector size of 512 bytes).  It reports the
        partition size as minus size and creates a 1 TiB file system.
    
    GParted wants a single maximum file system size and the code is not
    ready for a differing maximum file system size for different sector
    sizes.
    
    In fat16::create() could specify larger "logical" sector sizes to
    mkfs.fat when the partition is larger than 2 TiB to allow maximum volume
    size to be increased further.  However that will take a lot of cross
    platform testing to ensure that all sorts of devices support "logical"
    sector sizes other than 512 bytes on devices with a hardware sector size
    of 512 bytes.  This is too much effort.
    
    Therefore implement a single FAT32 maximum volume size of 2 TiB.
    
    Bug 763896 - GParted not restricting creation of FAT32 volume to maximum
                 size of 2 TiB

2016-03-16  Seong-ho Cho <shcho@gnome.org>

    Updated Korean translation

2016-03-14  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2016-03-13  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2016-03-09  Tom Tryfonidis <tomtryf@gnome.org>

    Updated Greek translation

2016-03-04  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2016-02-24  Rafael Fontenelle <rffontenelle@gmail.com>

    Updated Brazilian Portuguese translation

2016-02-24  Rafael Fontenelle <rffontenelle@gmail.com>

    Updated Brazilian Portuguese translation

2016-02-24  Josef Andersson <josef.andersson@gmail.com>

    Updated Swedish translation

2016-02-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use a single progress bar for the internal block copy operation (#762367)
    
    As part of the internal block copy operation 5 initial ranges of blocks
    are copied using different block sizes to determine the fastest.  Then
    the remainder is copied using the fastest block size.  Each of these
    copies reports progress independently, so during the benchmarking phase
    the progress bar flashes 5 times as it goes from 0 to 100% in a fraction
    of a second, before showing the progress of the remainder.
    
    This looks bad, so report a single progress bar for all the ranges of
    blocks copied in a single copy operation.
    
    Already have variables done and length which track progress within each
    copied range; and total_done which records amount copied in previous
    ranges.  Just add total_length to allow overall progress to be reported.
    
    Bug 762367 - Use a single progress bar for the whole of the internal
                 copy operation

2016-02-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update internal block copy, total_done after last progress report (#762367)
    
    Previously total_done was updated in copy_thread() after copying of the
    blocks, but importantly before the last call to set_progress_info() to
    update the progress bar.  Having total_done varying during the copy of a
    single range of blocks, single call to copy_blocks::copy(), is an
    impediment to being able to report a single progress bar across the
    whole internal copy operation.
    
    Move updating of total_done to copy() immediately after copy_thread()
    completes.
    
    Bug 762367 - Use a single progress bar for the whole of the internal
                 copy operation

2016-02-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display progress of NTFS file system specific copy operation (#762366)
    
    Copying of ntfs is performed using ntfsclone, which writes progress
    indication to standard output like this:
    
        # ntfsclone -f /dev/sdb2 /dev/sdb1 2> /dev/null
        NTFS volume version: 3.1
        Cluster size       : 4096 bytes
        Current volume size: 21474832384 bytes (21475 MB)
        Current device size: 21474836480 bytes (21475 MB)
        Scanning volume ...
        100.00 percent completed
        Accounting clusters ...
        Space in use       : 1832 MB (8.5%)
        Cloning NTFS ...
        100.00 percent completed
        Syncing ...
    
    Add ntfsclone progress tracker for ntfsclone command.  Deliberately
    doesn't stop the progress bar.  See comment in ntfs::clone_progress()
    for the explanation.
    
    Bug 762366 - Add progress bar to NTFS file system specific copy method

2016-02-22  hanniedu <lafeber-dumoleyn2@zonnet.nl>

    Update Dutch translation

2016-02-21  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2016-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Change to autoconf PKG_CHECK_EXISTS for set_default_icon_name() method (#762184)
    
    Previously the autoconf check for Gtk::Window::set_default_icon_name()
    method was a compile test because the documentation reported the method
    was available in gtkmm from 2.6 [1], however it wasn't available on
    RHEL / CentOS 5.x with gtkmm 2.10.
    
    Then commit [2] added detection and enabling of C++11 compilation, but
    after the above autoconf check.  So on Fedora 23 the compiler based
    autoconf check for set_default_icon_name() method failed because C++11
    compilation had not yet been enabled:
    
    >   checking for Gtk::Window::set_default_icon_name method... no
        checking for gtk_show_uri function... yes
        checking for Gtk::MessageDialog::get_message_area() method... yes
    >   checking for glibmm >= 2.45.40 which requires C++11 compilation... yes
    >   checking whether g++ supports C++11 features by default... no
    >   checking whether g++ supports C++11 features with -std=gnu++11... yes
    
    The gtkmm source code reveals that set_default_icon_name() method was
    only added in gtkmm 2.11.1 [3] so switch to a PKG_CHECK_EXISTS for this
    version of gtkmm.
    
    [1] gtkmm GTK::Window Class Reference
        https://developer.gnome.org/gtkmm/3.6/classGtk_1_1Window.html#a533d03e9b92d8ccd142ab3a44005cae4
    
    [2] Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
        d6d7cb2bbf2fc381b890f63bbbf626eacfc8cdf8
    
    [3] gtkmm NEWS file
        https://git.gnome.org/browse/gtkmm/tree/NEWS?h=gtkmm-2.14.0#n565
    
    Bug 762184 - Autoconf check for C++11 comes after compile test for
                 Gtk::Window::set_default_icon_name()

2016-01-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Always be explicit when emitting a signal by calling emit()
    
    Mostly the code is explicit and calls the emit() method when emitting a
    signal [1], like this:
        signal_name.emit();
    
    However there are a few cases which use the function call operator on
    the signal object [2], like this:
        signal_name();
    
    The behaviour is identical [3] but it is preferred to be explicit that a
    signal callback is being initiated, and it also makes them much easier
    to search for too.
    
    [1] List explicit emit() signal calls
            fgrep '.emit(' src/*.cc
    
    [2] List function call operator emitted signals
            egrep "`sed -n '/sigc::signal/s/.*sigc::signal.*> *\([a-zA-Z_]*\).*/\1/p' include/*.h | tr '\n' '|' | sed 's/\(.*\).$/[^a-zA-Z_](\1)\\\(/'`" src/*.cc
    
    [3] Quote from the libsigc++ Reference Manual, class sigc::signal
        https://developer.gnome.org/libsigc++/stable/classsigc_1_1signal7.html#ab37db0ecc788824d0baa3c301efc8dcd
    
            result_type sigc::signal<...>::operator()(...)
    
            Triggers the emission of the signal (see emit())

2016-02-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Leave commands with progress bars shown in the applying dialog (#760709)
    
    For non-progress tracked external commands the command being executed is
    displayed in the Apply pending operations dialog, just below the top
    pulsing progress bar.  However for progress tracked external commands
    the description of the parent operation detail is displayed instead.
    
    Example 1: non-progress tracked xfs check repair:
    
                                                                   TreePath
        Check and repair file system (xfs) on /dev/sdc1            0
        + calibrate /dev/sdc1                                      0:0
        + check file system on /dev/sdc1 for errors and (if po...  0:1
          + xfs_repair -v /dev/sdc1                                0:1:0
            + [empty stdout]                                       0:1:0:0
            + [stderr]Phase 1 - find and verify superblock...      0:1:0:1
    
    "xfs_repair -v /dev/sdc1" (TreePath 0:1:0) is shown because it is the
    latest updated operation detail which is timed (set to status
    executing).
    
    Example 2: progress tracked ext4 copy using e2image:
    
                                                                   TreePath
        Copy /dev/sdc2 to /dev/sdc3                                0
        + calibrate /dev/sdc2                                      0:0
        + check file system on /dev/sdc2 for errors and (if po...  0:1
        + set partition type on /dev/sdc3                          0:2
        + copy file system of /dev/sdc2 to /dev/sdc3               0:3
          + e2image -ra -p /dev/sdc2 /dev/sdc3                     0:3:0
            + [stdout]Scanning inodes...                           0:3:0:0
            + [stderr]e2image 1.42.9 (28-Dec-2013)...              0:3:0:1
    
    "copy file system of /dev/sdc2 to /dev/sdc3" (TreePath 0:3) is shown
    because that operation detail is also timed and it is being constantly
    updated by the progress bar updates via it.
    
    Change execute_command() to update the progress bar via the operation
    detail it creates to hold the command being executed, instead of the
    parent operation detail, to resolve the above.  Also replaces calling
    operationdetail.get_last_child() throughout the method.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-02-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify XFS copy specific code progress bar usage (#760709)
    
    Remove starting and stopping the progress bar in xfs::copy().  The
    progress bar will be automatically started in xfs::copy_progress()
    callback when run_progressbar() is called; and automatically stopped in
    FileSystem::execute_command() when it calls stop_progress() at the end.
    
    Note that this will now not initialise the progress bar from zero
    immediately that the XFS copy is started, but instead 0.5 seconds into
    the copy when xfs::copy_progress() timed callback is called for the
    first time.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-02-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Connect timed progress tracking callbacks inside execute_command() (#760709)
    
    The timed progress tracking callback for execution of xfs copy follows
    this pattern:
    
        sigc::connection c;
        ...
        c = Glib::signal_timeout().connect( ... sigc::mem_fun( *this, &xfs::copy_progress ) ..., 500 /*ms*/ );
        ... execute_command( ... );
        c.disconnect();
    
    As with output progress tracking callbacks for ext2/3/4 and ntfs file
    system specific commands, pass the callback slot and a flag into
    execute_command() and connect the timed callback inside.  This
    simplified the pattern to:
    
        ... execute_command( ...|EXEC_PROGRESS_TIMED,
                             static_cast<TimedSlot>( sigc::mem_fun( *this, &xfs::copy_progress ) ) );
    
    NOTE:
    The type of sigc::mem_fun() doesn't allow the compiler to choose between
    the two overloaded variants of execute_command() with the fourth
    parameter of either (full types without typedefs of StreamSlot and
    TimedSlot respectively):
        sigc::slot<void, OperationDetail *> stream_progress_slot
        sigc::slot<bool, OperationDetail *> timed_progress_slot
    Therefore have to cast the result of all callback slots to the relevant
    type.  Hence:
        static_cast<StreamSlot>( sigc::mem_fun( *this, &{CLASS}::{NAME}_progress ) )
        static_cast<TimedSlot>( sigc::mem_fun( *this, &xfs::copy_progress ) )
    
    References:
    *   [sigc] Functor not resolving between overloaded methods with
        different slot types
        https://mail.gnome.org/archives/libsigc-list/2016-February/msg00000.html
    *   Bug 306705 - Can't overload methods based on different slot<>
        parameters.
        https://bugzilla.gnome.org/show_bug.cgi?id=306705
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove the unnecessary signal_progress (#760709)
    
    For the relevant stream from a file system specific command being
    tracked, there were 2 callbacks attached: update_command_output() and
    update_command_progress().  When called, update_command_progress() just
    emitted signal_progress to call the file system specific progress
    tracker callback.  Like this:
    
        signal_update.emit() -> update_command_output()
                             -> update_command_progress()
                                    signal_progress.emit() -> {CLASS}::{NAME}_progress()
    
    Instead just connect the file system specific progress tracker callback
    directly to signal_update and bypass the unnecessary
    update_command_progress() method and the signal_progress signal.  Like
    this:
    
        signal_update.emit() -> update_command_output()
                             -> {CLASS}::{NAME}_progress()
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Connect output progress tracking callbacks inside execute_command() (#760709)
    
    All the output progress tracking callbacks for execution of ext2/3/4 and
    ntfs file system specific commands followed this pattern:
    
        sigc::connection c = signal_progress.connect( sigc::mem_fun( *this, &ext2::..._progress ) );
        bool success = ! execute_command( ... );
        c.disconnect();
        return success;
    
    Instead, pass the callback slot and a flag into execute_command() and
    connect the callback inside.  This simplifies the pattern to:
    
        return ! execute_command( ...|EXEC_PROGRESS_STDOUT,
                                  sigc::mem_fun( *this, &ext2::..._progress ) );
    
    Note that as the progress tracking callbacks are only registered against
    updates to the relevant stream from the tracked commands they won't be
    called when the other stream is updated any more.
    
    Also note that signal_progress is a member of the FileSystem class and
    derived objects so lives as long as GParted is running, therefore the
    progress tracking callbacks need explicitly disconnecting at the end of
    execute_command().  However signal_update is a member of the PipeCapture
    class of which the output and error local variables in execute_command()
    are types.  Therefore there is no need to explicitly disconnect the
    signal_update callbacks as they will be destructed along with the
    callback slots when they go out of scope at the end of the
    execute_command() method.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused OperationDetail members (#760709)
    
    Remove unused members: fraction and progress_text from the
    OperationDetail class now that the ProgressBar class has superseded
    their use.  This also allows removal of timer_global member from the
    copy_blocks class.  Timer_global was only used to track the elapsed time
    copying blocks and allow the remaining time to be estimated and written
    into progress_text.  The ProgressBar class also does this itself
    internally.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify use of the progress bar via OperationDetail (#760709)
    
    Most of the file system specific command progress trackers followed this
    pattern:
    
        void {CLASS}::{NAME}_progress( OperationDetail *operationdetail )
        {
                ProgressBar & progressbar = operationdetail->get_progressbar();
                // parse output for progress and target values
                if ( // have progress and target values )
                {
                        if ( ! progressbar.running() )
                                progressbar.start( target );
                        progressbar.update( progress );
                        operationdetail->signal_update( *operationdetail );
                }
                else if ( // found progress finished )
                {
                        if ( progressbar.running() )
                                progressbar.stop();
                        operationdetail->signal_update( *operationdetail );
                }
        }
    
    That is a lot of repetition handling progress bar updates and
    OperationDetail object update signalling.  Remove the need for direct
    access to the single ProgressBar object and provide these two
    OperationDetail methods instead:
        // Start and update in one
        run_progressbar( progress, target, optional text_mode );
        stop_progressbar();
    
    Now the file system specific command progress trackers can become:
    
        void {CLASS}::{NAME}_progress( OperationDetail *operationdetail )
        {
                // parse output for progress and target values
                if ( // have progress and target values )
                {
                        operationdetail->run_progressbar( progress, target );
                }
                else if ( // found progress finished )
                {
                        operationdetail->stop_progressbar();
                }
        }
    
    Make ProgressBar::get_progressbar() a private method to enforce use of
    the new way to access the progress bar via the run_progress() and
    stop_progressbar() methods.  Then make the Dialog_Progress a friend
    class to OperationDetail so that the Apply pending operations dialog can
    still access the single ProgressBar object for its querying needs.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display progress of ext2/3/4 file system specific copy and move operations (#760709)
    
    Using e2image to copy a file system looks like this.  (Intermediate
    progress lines which are constantly overwritten are indicated with ">").
        # e2image -ra -p /dev/sdb4 /dev/sdb5
        e2image 1.42.13 (17-May-2015)
        Scanning inodes...
    >   Copying 0 / 276510 blocks (0%)
    >   Copying 8845 / 276510 blocks (3%)
    >   Copying 48433 / 276510 blocks (18%)
    >   Copying 77135 / 276510 blocks (28%)
    >   Copying 111311 / 276510 blocks (40%)
    >   Copying 137039 / 276510 blocks (50%)
    >   Copying 166189 / 276510 blocks (60%) 00:00:03 remaining at 108.20 MB/s
    >   Copying 190285 / 276510 blocks (69%) 00:00:03 remaining at 106.19 MB/s
    >   Copying 209675 / 276510 blocks (76%) 00:00:02 remaining at 102.38 MB/s
    >   Copying 238219 / 276510 blocks (86%) 00:00:01 remaining at 103.39 MB/s
    >   Copying 256692 / 276510 blocks (93%) 00:00:00 remaining at 100.27 MB/s
        Copied 276510 / 276510 blocks (100%) in 00:00:10 at 108.01 MB/s
    
    Note that the copying figures are reported in file system block size
    units and the progress information is written to stderr, hence needing
    these two previous commits:
        Record file system block size where known (#760709)
        Call any FS specific progress trackers for stderr updates too (#760709)
    
    Add progress tracking function for e2image command.  Also tracks when
    the text progress indicator has passed in the output so that the
    progress bar can be stopped as well as started when needed.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Call any FS specific progress trackers for stderr updates too (#760709)
    
    So far the signal_progress callback slot was only emitted when standard
    output from the file system specific command was updated.  This was okay
    as all the commands until now wrote their progress information to
    stdout.  However e2image writes its progress information to stderr,
    therefore also emit signal_progress when stderr is updated too.
    
    This does mean that the file system specific *_progress() tracking
    callbacks will be called when either of the OperationDetail objects
    containing stdout or stderr are updated.  Therefore the trackers may be
    called when there is no update to the stream from which it is parsing
    the progress information.  This is not a problem as the tracker will
    just update the progress bar with the same information it already has.
    Also it won't happen much as only e2image is known to write to both
    streams, and then only one line to stdout and the updated progress
    information to stderr.  This is just an observation and not an issue
    which needs coding around.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Record file system block size where known (#760709)
    
    Record the file system block size in the Partition object.  Only
    implemented for file systems when set_used_sectors() method has already
    parsed the value or can easily parse the value from the existing
    executed command(s).
    
    Needed for ext2/3/4 copies and moves performed using e2image so that
    they can be tracked in bytes by the ProgressBar class as e2image reports
    progress in file system block size units.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2015-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display progress of XFS file system specific copy operation (#760709)
    
    XFS uses a file system specific method to copy the partition using
    "xfsdump | xfsrestore".  Monitor progress by periodically querying the
    destination file system usage and comparing to the source file system
    usage.  Use 0.5 seconds as the polling interval to match that used by
    the internal block copying algorithm.
    
    NOTE:
    The number of used blocks in the source and destination file system will
    be very close but may not match exactly.  I have seen an XFS copy finish
    with the following progress text:
        1.54 GiB of 1.50 GiB copied (-00:00:02 remaining)
    Allow the progress bar to overrun like this as it is informing the user
    that it actually copied a little more data and took a little longer than
    expected.  Needs these two previous commits to correctly round and
    format the negative time remaining:
        Fix rounding of negative numbers (#760709)
        Fix formatting of negative time values (#760709)
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix formatting of negative time values (#760709)
    
    ... to display a negative sign before the hours, minutes and seconds.
    Before:
        Utils::format_time(-1)   = "00:00:0-1"
        Utils::format_time(-119) = "00:0-1:0-59"
    After:
        Utils::format_time(-1)   = "-00:00:01"
        Utils::format_time(-119) = "-00:01:59"
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix rounding of negative numbers (#760709)
    
    Utils::round() was doing +0.5 then truncate.  Correct for positive
    values.  Wrong for negative values.
    E.G.
        Utils::round(-1.4)
            = trunc(-1.4 + 0.5)
            = trunc(-0.9)
            = 0
    Round of -1.4 is definitely not 0.  Fix this for negative values by
    subtracting 0.5 then truncating.
    
    Reference:
        How can I convert a floating-point value to an integer in C?
        https://www.cs.tut.fi/~jkorpela/round.html
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix ntfs resize progress tracker matching spurious text (#760709)
    
    When the ntfs resize operation had almost completed, percentage complete
    was >= 99.9%, the progress tracker was passing 0.04 (4%) to the progress
    bar.  After reading the next chunk of output from the ntfsresize command
    the last line contained this text:
        "  4)  set the bootable flag for the partit"
    
    End of the ntfsresize command output for context:
        Relocating needed data ...
        100.00 percent completed
        Updating $BadClust file ...
        Updating $Bitmap file ...
        Updating Boot record ...
        Syncing device ...
        Successfully resized NTFS on device '/dev/sdd4'.
        You can go on to shrink the device for example with Linux fdisk.
        IMPORTANT: When recreating the partition, make sure that you
          1)  create it at the same disk sector (use sector as the unit!)
          2)  create it with the same partition type (usually 7, HPFS/NTFS)
          3)  do not make it smaller than the new NTFS filesystem size
          4)  set the bootable flag for the partition if it existed before
        Otherwise you won't be able to access NTFS or can't boot from the disk!
        If you make a mistake and don't have a partition table backup then you
        can recover the partition table by TestDisk or Parted's rescue mode.
    
    This was occurring because *scanf() can't actually report failure to
    match fixed text after conversion of the last variable.  See code
    comment in ntfs::resize_progress() for more details.  Fix by using
    .find() instead to match the required "percent completed" explicit text
    of the progress information when it appears on the last line.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update ntfs resize progress tracker to use the new ProgressBar (#760709)
    
    Adapt the ntfs resize progress tracker to use the new ProgressBar class.
    Also make it track when the text progress indicator has passed in the
    output so that the progress bar can be stopped as well as started when
    needed.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update ext2 fsck progress tracker to use the new ProgressBar (#760709)
    
    Adapt the ext2 fsck progress tracker to use the new ProgressBar class.
    Also make it track when the text progress bar has completely passed in
    the output so that the progress bar can be stopped as well as started
    when needed.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update ext2 create progress tracker to use the new ProgressBar (#760709)
    
    Adapt the ext2 create file system progress tracker to used the new
    ProgressBar class.  Also make it track when the text progress indicator
    completes so that the progress bar can be stopped as well as started
    when needed.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update ext2 resize progress tracker to use the new ProgressBar (#760709)
    
    Adapt the ext2 resize progress tracker to the new ProgressBar class.
    Also update the progress function to track when text progress bars have
    completely passed in the output so that the progress bar can be stopped
    as well as started when needed.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display progress from the single ProgressBar in the GUI (#760709)
    
    Change the Applying pending operations dialog so that it takes it source
    of progress from the single ProgressBar object, rather than the fraction
    value in every OperationDetail object.  Also remove ProgressBar
    debugging now that it is being used to drive the UI.
    
    NOTE:
    This temporarily causes the existing file system specific progress bars
    to not be shown because they still update via the fraction member in
    each OperationDetail object, rather than the new ProgressBar.  This will
    be corrected in following commits.
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add a single ProgressBar for all OperationDetail objects (#760709)
    
    1) Multiple progress bars
    
    The OperationDetail class contains member fraction which is used to feed
    data to the current operation progress bar shown in the Applying pending
    operations dialog.  Dialog_Progress::on_signal_update() gets called for
    every updated OperationDetail object and depending on whether fraction
    is > 0.0 or not, switches between showing a growing or pulsing progress
    bar.  This leads to the conclusion that every OperationDetail object
    currently being updated is effectively driving the single on screen
    progress bar with different data.
    
    The Copy_Blocks code is careful to update text and faction in a single
    OperationDetail object and everything is good.  The on screen progress
    bar is switched into growing mode and then grows to 100%.
    
    Since external command output is updated in real time [1] there are two
    OperationDetail objects, one for stdout and one for stderr, which are
    updated whenever data is read from the relevant stream.  Also now that
    progress is interpreted from some external command output [2][3][4] a
    separate OperationDetail object is getting updated with the progress
    fraction.  (Actually the grandparent OperationDetail of the ones
    receiving stdout and stderr updates as used by the file system specific
    *_progress() methods).  In the normal case of an external command
    which is reporting it's progress two OperationDetails are constantly
    being updated together, the OperationDetail object tracking stdout and
    it's grandparent receiving progress fraction updates.  This causes the
    the code in Dialog_Progress::on_signal_update() to constantly switch
    between growing and pulsing progress bar mode.  The only reason this
    doesn't flash the progress bar is because the stdout OperationDetail
    object is updated first and before the 100 ms timeout fires to pulse the
    bar, it's grandparent is updated with the new fraction to keep growing
    the bar instead.
    
    2) Common code
    
    The Copy_Blocks code currently tracks the progress of blocks copied
    against target amount, which it has to do anyway.  That information is
    then used to generate the text and fraction to update into the
    OperationDetail object and drive the on screen progress bar.  This same
    level of tracking is wanted for the XFS and ext2/3/4 file system
    specific copy methods.
    
    Conclusion and solution
    
    Having multiple sources of progress bar data is a problem and makes it
    clear that there must be only one source of progress data.  Also some
    code can be shared for tracking the amount of blocks copied and
    generating the display.
    
    Therefore have a single ProgressBar object which is used everywhere.
    
    This commit
    
    It just creates a single ProgressBar object which is available via all
    OperationDetail objects and Copy_Blocks is updated accordingly.  Note
    that the ProgressBar still contains debugging and that the GUI progress
    bar of the current operation is still driven via the fraction member in
    any OperationDetail object.
    
    Referenced commits:
    
    [1] 52a2a9b00a32996921ace055e71d0e09fb33c5fe
        Reduce threading (#685740)
    
    [2] ae434579e160ca2c306921b12d4211bf9abacef7
        Display progress for e2fsck (#467925)
    [3] baea186138cc08cac1f13f28300ca0f4b09ae16d
        Display progress for mke2fs (#467925)
    [4] 57b028bb8e7c9fa5e750624f405cc268dfa3b4af
        Display progress during resize (#467925)
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Write a generic progress bar class (#760709)
    
    Write a generic progress bar class.  Has the following features:
    * Has separate progress and target numbers, rather than a single
      completion fraction, to enable the the next feature.
    * Optionally generates text reporting the amount of data copied using
      the progress and target numbers like this:
          "1.00 MiB of 16.00 MiB copied"
    * After running for 5 seconds, also add estimated remaining time.
      (Waits to allow the data copying rate to settle down a little before
      estimating the remaining time).  Looks like this:
          "1.00 MiB of 16.00 MiB copied (00:01:59) remaining)"
    
    The ProgressBar class is not driving the visual progress bar yet.  It
    has just been added into the internal block copy algorithm and generates
    debug messages showing the progress bar is operating correctly.
    Debugging looks like this:
    
        DEBUG: ProgressBar::start(target=2.0636e+09, text_mode=PROGRESSBAR_TEXT_COPY_BYTES)
        DEBUG: ProgressBar::update(progress=1.30023e+08) m_fraction=0.0630081 m_text="124.00 MiB of 1.92 GiB copied"
        DEBUG: ProgressBar::update(progress=2.67387e+08) m_fraction=0.129573 m_text="255.00 MiB of 1.92 GiB copied"
        DEBUG: ProgressBar::update(progress=4.0475e+08) m_fraction=0.196138 m_text="386.00 MiB of 1.92 GiB copied"
        ...
        DEBUG: ProgressBar::update(progress=1.13351e+09) m_fraction=0.549289 m_text="1.06 GiB of 1.92 GiB copied (00:00:04 remaining)"
        DEBUG: ProgressBar::update(progress=1.26249e+09) m_fraction=0.611789 m_text="1.18 GiB of 1.92 GiB copied (00:00:04 remaining)"
        DEBUG: ProgressBar::update(progress=1.39041e+09) m_fraction=0.67378 m_text="1.29 GiB of 1.92 GiB copied (00:00:03 remaining)"
        ...
        DEBUG: ProgressBar::update(progress=1.97552e+09) m_fraction=0.957317 m_text="1.84 GiB of 1.92 GiB copied (00:00:00 remaining)"
        DEBUG: ProgressBar::update(progress=2.0636e+09) m_fraction=1 m_text="1.92 GiB of 1.92 GiB copied"
        DEBUG: ProgressBar::stop()
    
    Bug 760709 - Add progress bars to XFS and EXT2/3/4 file system specific
                 copy methods

2016-02-07  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2016-01-31  Mario Blättermann <mario.blaettermann@gmail.com>

    Updated German translation

2016-01-31  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2016-01-30  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2015-12-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify code in Display_Info() by making use of Glib::build_path()
    
    Simplify code in Dialog_Partition_Info::Dialog_Info() which was open
    coding concatenating together a vector of strings with a new line
    between each.  Replace with Glib::build_path(), as used elsewhere in
    this method and other code.

2016-01-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add LUKS read-only / dmsetup note to the README file (#760080)
    
    Bug 760080 - Implement read-only LUKS support

2016-01-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent incorrect no usage values warning for luks/unknown (#760080)
    
    Create and open a LUKS mapping but don't create any file system within.
    
        # cryptsetup luksFormat /dev/sdb5
        # cryptsetup luksOpen /dev/sdb5 sdb5_crypt
    
    GParted was incorrectly reporting this warning:
    
        Unable to read the contents of this file system!
        Because of this some operations may be unavailable.
        The cause might be a missing software package.
        The following list of software packages is required for luks file
        system support:  dmsetup.
    
    This is even though the usage figures for the on disk LUKS encryption
    are fully known.  See luks::set_used_sectors().
    
    This was occurring because derived PartitionLUKS::set_usage_known()
    was checking usage figures for the outer LUKS and the inner encrypted
    file system, unknown in this case.  Correct when displaying figures in
    the UI, but not correct in GParted_Core::set_used_sectors() when only
    checking the outer LUKS usage figures were set correctly.  Fix this.
    
    Bug 760080 - Implement read-only LUKS support

2016-01-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove LUKS unsupported warning (#760080)
    
    Bug 760080 - Implement read-only LUKS support

2016-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename file system from "crypt-luks" to "luks" (#760080)
    
    The name of the format is Linux Unified Key Setup, or just LUKS.
    https://en.wikipedia.org/wiki/Linux_Unified_Key_Setup
    
    Bug 760080 - Implement read-only LUKS support

2015-12-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display messages for encrypted file systems (#760080)
    
    At the moment any messages for an encrypted file system aren't shown,
    only messages from the outer PartitionLUKS object are shown.  Also in
    Win_GParted::activate_paste() the selected Partition object, possibly
    a derived PartitionLUKS, is cloned and the messages cleared.
    
    Therefore a set of accessor methods must be provided to query and modify
    partition messages.  Messages will be stored in the Partition object to
    which they are added and retrieved from all.  So in the case of a
    derived PartitionLUKS they will be retrieved from the messages vector of
    the PartitionLUKS object itself and the messages vector for the
    encrypted file system it contains.
    
    To replace code like this in GParted_Core:
    
        partition_temp->messages = messages;
    
    We might naturally provide a set_messages() method which assigns the
    messages vector and is used like this:
    
        partition_temp->set_messages( messages );
    
    However on a PartitionLUKS object what should set_messages() do?  By the
    name it will replace any existing messages in the PartitionLUKS object
    itself, but what should happen to the messages for the contained
    encrypted Partition object?  Should they be cleared or left alone?
    Rather than implement set_messages() with unclear semantics implement
    append_messages(), which in the PartitionLUKS object case will clearly
    leave any messages for the contained encrypted Partition object alone.
    Append_messages() is then used to add messages as the Partition or
    PartitionLUKS objects when populating the data in GParted_Core.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add encryption section into the Information dialog (#760080)
    
    For LUKS formatted partitions add an encryption section into the
    Information dialog and display the type of encryption, path, UUID and
    status of the encryption.
    
    The file system section continues to display appropriate file system
    details, including the partition graphic with the file system specific
    border colour and correct usage.  The details will either be of a plain
    file system, an encrypted file system, or nothing when there is no open
    dm-crypt mapping, leaving the encrypted file system inaccessible.
    Should there be LUKS encryption directly within LUKS encryption then the
    details of the inner encryption will be displayed in the file system
    section.  However this configuration will not be further supported by
    GParted.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display usage of encrypted file systems (#760080)
    
    There is already the set of methods in the Partition class to report the
    file system usage.  Virtualise them and provide PartitionLUKS specific
    implementations to calculate the usage of a file system wrapped in LUKS
    encryption.
    
    See the ascii art and comment in PartitionLUKS.cc for the details of
    those calculations.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display the label of encrypted file systems (#760080)
    
    LUKS headers don't provide any concept of label.  Also there is already
    the method Partition::get_filesystem_label() for getting the *file
    system* label, so virtualise it and provide an appropriate
    implementation to get the label of an encrypted file system represented
    within a derived PartitionLUKS object.  This causes the label to be
    displayed correctly in the main window.
    
    It also happens to display the encrypted file system label in the
    Information dialog for a LUKS formatted partition.  However the whole
    Information dialog will be addressed differently in a following commit.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display GUI column Mount Point correctly for encrypted file systems (#760080)
    
    For open dm-crypt mappings get the Mount Point value from the encrypted
    file system Partition object.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display encrypted file system colour correctly in the disk graphic (#760080)
    
    In the main window disk graphic, when there is an open dm-crypt mapping,
    display the colour of the encrypted file system.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display "[Encrypted] FSTYPE" in the File System column (#760080)
    
    In the File System column in the GUI, when there is an open dm-crypt
    mapping, display the colour square for the encrypted file system within
    and the text as "[Encrypted] FSTYPE".  For closed mappings nothing can
    be known about the encrypted file system within so continue to display a
    purple square and the text "[Encrypted]".
    
    Looks like:
    
        Partition        | File System
          ...
          /dev/sdb3        # ext4
        v /dev/sdb4    *   # extended
            /dev/sdb5      # [Encrypted]
            /dev/sdb6  *   # [Encrypted] unknown
            /dev/sdb7  *   # [Encrypted] ext4
    
    Bug 760080 - Implement read-only LUKS support

2015-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove Partition::color member (#760080)
    
    Partition object represents a region of a disk and the file system
    within.  GParted always displays the colour base of the type of the file
    system.  Therefore remove the color member and always look it up from
    the type of the file system as needed.
    
    This makes one less member that will need virtual accessor methods with
    different handling in the derived PartitionLUKS class.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Populate encrypted Partition member inside PartitionLUKS (#760080)
    
    When there exists an open dm-crypt mapping, populate the encrypted
    Partition object representing the encrypted file system.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add PartitionLUKS class and create objects (#760080)
    
    Absolute minimum implementation of a PartitionLUKS class which can be
    constructed, polymorphically copied and destroyed.  Contains an
    "encrypted" member of type Partition to represent the encrypted file
    system within the LUKS format.
    
    Create PartitionLUKS objects instead of base Partition objects when a
    LUKS formatted partition is found.  Only the base Partition object
    member values have been populated, and the "encrypted" member remains
    blank at this point.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor set_used_sectors() to be called per partition (#760080)
    
    This is the equivalent change as made to set_mountpoints() in an earlier
    commit.  Change GParted_Core::set_used_sectors() from being called with
    a vector of partitions and processing them all to being called per
    partition.  This is in preparation for calling set_used_sectors() on a
    single Partition object inside a PartitionLUKS object.
    
    Bug 760080 - Implement read-only LUKS support

2015-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Populate active LUKS mountpoints with /dev/mapper/NAME entry (#760080)
    
    Populate the canonical device name, /dev/mapper/NAME, used to access the
    encrypted file system into the mount points of the Partition object.
    This is the equivalent of what is already done for the Volume Group name
    and SWRaid Array device.
    
    This does get displayed in the Mount Point column in the main window,
    which isn't wanted.  However the data will be needed when displaying
    details of the encryption mapping in the Information dialog.  Both will
    be dealt with in following commits.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor set_mountpoints() to be called per partition (#760080)
    
    Previously GParted_Core::set_mountpoints() was called with a vector of
    partitions and processed them all.  Now make set_mountpoints() process a
    single partition and push the calls to it down one level from
    set_devices_thread() into set_device_partitions() and
    set_device_one_partition().  This is in preparation for having an
    encrypted file system represented as a Partition object inside a
    PartitionLUKS object and needing to call set_mountpoints() for the inner
    single Partition object.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement demand loading of LUKS_Info cache (#760080)
    
    Only load the LUKS_Info cache of active dm-crypt mappings when the first
    LUKS partition is encountered.  Not needed from a performance point of
    view as the longest that I have ever seen "dmsetup table --target crypt"
    take to run is 0.05 seconds.  Just means that the dmsetup command is
    only run when there are LUKS partitions and the information is needed.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Populate LUKS partition usage (#760080)
    
    Populate the used, unused and unallocated figures in the Partition
    object for a LUKS formatted partition.  See comment in
    luks::set_used_sectors() for the rational of what is used, unused and
    unallocated.
    
    As that rational mentions, a LUKS header does not store the size of the
    encrypted data and is assumed to extend to the end of the partition by
    the tools which start the mapping.
    
    An underlying block device of 128 MiB (131072 KiB).
        # sfdisk -s /dev/sde
        131072
    
    An active LUKS mapping at offset 2 MiB (4096 512-byte sectors) and
    length 126 MiB (129024 KiB, 258048 512-byte sectors).
        # sfdisk -s /dev/mapper/sde_crypt
        129024
        # cryptsetup status sde_crypt
        /dev/mapper/sde_crypt is active.
          type:  LUKS1
          cipher:  aes-cbc-essiv:sha256
          keysize: 256 bits
          device:  /dev/sde
          offset:  4096 sectors
          size:    258048 sectors
          mode:    read/write
    
    No size/length reported when dumping the LUKS header, just (payload)
    offset.
        # cryptsetup luksDump /dev/sde
        LUKS header information for /dev/sde
    
        Version:        1
        Cipher name:    aes
        Cipher mode:    cbc-essiv:sha256
        Hash spec:      sha1
        Payload offset: 4096
        MK bits:        256
        MK digest:      7f fb ba 40 7e ba e4 3b 2f c6 d0 93 7b f7 05 49 7b 72 d4 ad
        MK salt:        4a 5b 54 f9 7b 67 af 6e ef 16 31 0a fe d9 7e 5f
                        c3 66 dc 8a ed e0 07 f4 45 c3 7c 1a 8d 7d ac f4
        MK iterations:  37750
        UUID:           0a337705-434a-4994-a842-5b4351cb3778
        ...
    
    Shrink the LUKS mapping to 64 MiB (65536 KiB, 131072 512-byte sectors).
        # cryptsetup resize --size 131072 sde_crypt
        # sfdisk -s /dev/mapper/sde_crypt
        65536
        # cryptsetup status sde_crypt
        /dev/mapper/sde_crypt is active.
          type:  LUKS1
          cipher:  aes-cbc-essiv:sha256
          keysize: 256 bits
          device:  /dev/sde
          offset:  4096 sectors
          size:    131072 sectors
          mode:    read/write
    
    Stop and start the LUKS mapping.
        # cryptsetup luksClose sde_crypt
        # cryptsetup luksOpen /dev/sde sde_crypt
    
    The size of the LUKS mapping is back to 126 MiB (129024 KiB, 258048
    512-byte sectors), extending to the end of the partition.
        # sfdisk -s /dev/mapper/sde_crypt
        129024
        # cryptsetup status sde_crypt
        /dev/mapper/sde_crypt is active.
          type:  LUKS1
          cipher:  aes-cbc-essiv:sha256
          keysize: 256 bits
          device:  /dev/sde
          offset:  4096 sectors
          size:    258048 sectors
          mode:    read/write
    
    Bug 760080 - Implement read-only LUKS support

2015-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add loading of LUKS mapping offset and length (#760080)
    
    Also load the starting offset and length of the active dm-crypt mapping
    into the LUKS_Info module from the dmsetup output.  This provides the
    location and size of the encrypted data within the underlying block
    device.
    
    Note that dmsetup reports in units of 512 bytes sectors [1], the GParted
    LUKS_Info module uses bytes and GParted Partition objects work in device
    sector size units.  However the actual sector size of a dm-crypt mapping
    [2] is the same as that of the underlying block device [3].
    
        # modprobe scsi_debug dev_size_mb=128 sector_size=4096
        # fgrep scsi_debug /sys/block/*/device/model
        /sys/block/sdd/device/model:scsi_debug
        # parted /dev/sde print
        Error: /dev/sde: unrecognised disk label
        Model: Linux scsi_debug (scsi)
        Disk /dev/sde: 134MB
    [3] Sector size (logical/physical): 4096B/4096B
        Partition Table: unknown
    
        # cryptsetup luksFormat /dev/sde
        # cryptsetup luksOpen /dev/sde sde_crypt
        # parted /dev/mapper/sde_crypt print
        Error: /dev/mapper/sde_crypt: unrecognised disk label
        Model: Linux device-mapper (crypt) (dm)
        Disk /dev/mapper/sde_crypt: 132MB
    [2] Sector size (logical/physical): 4096B/4096B
        Partition Table: unknown
    
        # cryptsetup status sde_crypt
        /dev/mapper/sde_crypt is active.
          type:  LUKS1
          cipher:  aes-cbc-essiv:sha256
          keysize: 256 bits
          device:  /dev/sde
          offset:  4096 sectors
          size:    258048 sectors
          mode:    read/write
        # dmsetup table --target crypt
        ...
        sde_crypt: 0 258048 crypt aes-cbc-essiv:sha256 0000000000000000000000000000000000000000000000000000000000000000 0 8:64 4096
    
    [1] Both cryptsetup and dmsetup report the offset as 4096 and the size/
    length as 258048.  128 MiB / (4096+258048) = 512 byte units, even on a
    4096 byte sector size device.
    
    Update debugging of LUKS to this:
    
        # ./gpartedbin
        ======================
        libparted : 2.4
        ======================
        DEBUG: /dev/sdb5: LUKS closed
        DEBUG: /dev/sdb6: LUKS open mapping /dev/mapper/sdb6_crypt, offset=2097152, length=534773760
        /dev/sde: unrecognised disk label
        DEBUG: /dev/sde: LUKS open mapping /dev/mapper/sde_crypt, offset=2097152, length=132120576
    
    Bug 760080 - Implement read-only LUKS support

2015-12-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent Mount/Umount operation being available for LUKS (#760080)
    
    The code currently allows attempting to mount and unmount a LUKS
    partition.  It is nonsense to directly try to mount and unmount a LUKS
    partition and obviously doesn't work.  For read-only LUKS support there
    is no need to attempt to apply this to the encrypted file system within.
    Therefore prevent these operations for LUKS partitions.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent crypt-luks appearing in the Create New dialog and Format menu (#760080)
    
    This patchset is adding read-only LUKS support.  Creation of LUKS is
    planned to be a tick box adding encryption in the Create New Partition
    dialog.  Therefore remove the greyed out crypt-luks entry in the Create
    New Partition dialog and the Format menu.
    
    Bug 760080 - Implement read-only LUKS support

2015-11-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add busy detection of LUKS mapping (#760080)
    
    Provide a minimal implementation of a luks file system class which only
    does busy detection.
    
    NOTE:
    For now, read-only LUKS support, a LUKS partition will be busy when a
    dm-crypt mapping exists.  Later when read-write LUKS support is added
    GParted will need to look at the busy status of the encrypted file
    system within the open LUKS partition and map LUKS partition busy status
    to encryption being open or closed.
    
    Bug 760080 - Implement read-only LUKS support

2015-04-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add initial loading of LUKS mapping details (#760080)
    
    Load basic details of active Device-mapper encryption mappings from the
    kernel.  Use dmsetup active targets.
    
        # cryptsetup luksFormat /dev/sdb5
        # cryptsetup luksFormat /dev/sdb6
        # cryptsetup luksOpen /dev/sdb6 sdb6_crypt
        # ls -l /dev/mapper/sdb6_crypt /dev/dm-0
        lrwxrwxrwx. 1 root root 7 Nov 15 09:03 /dev/mapper/sdb6_crypt -> ../dm-0
        brw-rw----. 1 root disk 253, 0 Nov 15 09:03 /dev/dm-0
        # ls -l /dev/sdb6
        brw-rw----. 1 root disk 8, 22 Nov 15 09:02 /dev/sdb6
        # dmsetup table --target crypt
        sdb6_crypt: 0 1044480 crypt aes-cbc-essiv:sha256 0000000000000000000000000000000000000000000000000000000000000000 0 8:22 4096
    
    So far just load the mapping name and underlying block device reference
    (path or major, minor pair).
    
    Note that all supported kernels appear to report the underlying block
    device as major, minor pair in the dmsetup output.  Underlying block
    device paths are added to the cache when found during a search to avoid
    stat(2) call on subsequent searches for the same path.
    
    Prints debugging to show results, like this:
    
        # ./gpartedbin
        ======================
        libparted : 2.4
        ======================
        DEBUG: /dev/sdb5: LUKS closed
        DEBUG: /dev/sdb6: LUKS open mapping /dev/mapper/sdb6_crypt
    
    Bug 760080 - Implement read-only LUKS support

2016-01-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move DEV_MAPPER_PATH from DMRaid.h to Utils.h (#760080)
    
    Renamed from DEV_MAP_PATH to DEV_MAPPER_PATH.  Moved so that the
    constant is logically intended for use outside of the DMRaid class.
    
    Also specifically make the string constant have external linkage, rather
    than the default internal (static) linkage for constants, so that there
    is only one copy of the variable in the program, rather than one copy in
    each compilation unit which included DMRaid.h.  Namely DMRaid.cc and
    GParted_Core.cc.
    
    References:
    [1] Proper way to do const std::string in a header file?
        http://stackoverflow.com/questions/10201880/proper-way-to-do-const-stdstring-in-a-header-file
    [2] What is external linkage and internal linkage in C++
        http://stackoverflow.com/questions/1358400/what-is-external-linkage-and-internal-linkage-in-c/1358796#1358796
    
    Bug 760080 - Implement read-only LUKS support

2015-04-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused Partition(path) constructor
    
    History:
    
    1) The constructor was added by commit:
    
        6d8b169e734e1ecb191d5164689f24400010a7b4
        2006-03-14 21:37:47
        changed the way devices and partitions store their devicepaths.  Instead of
    
    2) Removed from most of the file system specific ::Copy() methods by
       commit:
    
        ad9f2126e7fc92c16fffe839847dfe1c520146c8
        2006-03-19 15:30:20
        fixed issues with copying (see also #335004) cleanups + added FIXME added
    
    3) Removed from GParted_Core::copy() method by commit:
    
        7bb7e8a84f164cd913384509a6adc3739a9d8b78
        2006-05-23 22:17:34
        Use ped_device_read and ped_device_write instead of 'dd' to copy
    
    4) Finally removed from the last place in xfs::Copy() method by commit:
    
        e414b71b73d42c97fd0abc03f859288a1eff19f6
        2012-01-11 19:49:13
        Update xfs resize and copy to use new helper functions
    
    The Partition(path) constructor is no longer used.  Remove.

2015-12-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add virtual qualifier to derived Operation class destructors
    
    When a base class destructor is virtual, derived class destructors are
    also virtual [1] even if they don't have the virtual qualifier.
    
    As the Operation destructor is virtual, derived Operation* classes
    destructors are virtual too.  Add virtual qualifier just to reflect what
    the C++ language mandates the compiler implement.
    
    [1] Derived class with non-virtual destructor
        http://stackoverflow.com/questions/7403883/derived-class-with-non-virtual-destructor

2015-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary sector_size parameter from Get_New_Partition methods
    
    The sector_size parameter is unnecessary as the value can be retrieved
    from the sector size of the selected Partition object on which the
    create new, copy & paste or resize/move operation is being performed.
    
    For the create new and resize/move operations it is trivial as the
    existing unallocated or in use Partition object on which the operation
    is being perform already contains the correct sector size.  For the copy
    & paste operation, which can copy across disk devices of different
    sector sizes, we merely have to use the sector size of the existing
    selected (destination) Partition object rather than copied (source)
    Partition object.  Hence these relevant lines in the new code:
    
        Dialog_Partition_Copy::set_data(selected_partition, copied_partition)
            new_partition = copied_partition.clone();
            ...
            new_partition->sector_size = selected_partition.sector_size;

2015-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop relying on specific values of PED_PARTITION_* enum
    
    The expressions used in the call to Set() were comparing
    lp_partition->type to 0 for the type parameter and passing it as a bool
    for the inside_extended parameter.  Libparted lp_partition->type is
    actually an enumeration.  The code was only working because of the
    specific values assigned to the symbolic names, PED_PARTITION_NORMAL = 0
    and PED_PARTITION_EXTENDED is non-zero (true).
    
    Make the code use the symbolic names and not depend on the actual
    enumeration values, which should be considered changeable and private to
    libparted.

2015-11-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add FILESYSTEM_MAP[FS_UNALLOCATED] entry
    
    When displaying an unallocated partition
    Win_GParted::set_valid_operations() calls GParted_Core::get_fs() with
    parameter FS_UNALLOCATED.
    
    Before this change, get_fs() would fail to find file system capabilities
    set for FS_UNALLOCATED and construct a not supported capabilities set
    and return that.
    
    Afterwards, find_supported_filesystems() creates a not supported
    capabilities set from the NULL pointer for FS_UNALLOCATED and adds this
    entry into the FILESYSTEMS vector.  Then get_fs() finds that not
    supported capabilities set for FS_UNALLOCATED in the FILESYSTEMS vector
    and returns that.
    
    This makes no functional difference.  It just seems right as other
    unsupported but used file system types have entries in FILESYSTEM_MAP.

2015-11-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Initialise all struct FS members
    
    The struct FS constructor initialised every member *except* filesystem
    and busy.  Then in *most* cases after declaring struct FS, assignments
    followed like this:
        FS fs;
        fs.filesystem = FS_BTRFS;
        fs.busy       = FS::GPARTED;
    But member busy wasn't always initialised.
    
    Add initialisation of members filesystem and busy to the struct FS
    constructor.  Specify optional parameter to the constructor to set the
    filesystem member, or when left off filesystem is initialised to
    FS_UNKNOWN.

2015-11-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify GParted_Core::get_fs()
    
    get_fs() used to work by (1) returning the supported capabilities of the
    requested file system found in the FILESYSTEMS vector; (2) if not found
    return the supported capabilities for file system FS_UNKNOWN; and (3)
    if that wasn't found either, create a not supported capabilities set for
    FS_UNKNOWN and return that.
    
    This is more complicated that required.  Also the not supported
    capabilities set, as created by struct FS() constructor, is the same as
    that created in file_supported_filesystems() local variable fs_notsupp.
    
    Simplify get_fs() just using a single not found code path returning a
    not supported capabilities set.

2015-12-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement and use virtual Partition copy constructor clone() (#759726)
    
    Final step for full polymorphic handling of Partition objects is to
    implement a virtual copy constructor.  C++ doesn't directly support
    virtual copy constructors, so instead use the virtual copy constructor
    idiom [1].  (Just a virtual method called clone() which is implemented
    in every polymorphic class and creates a clone of the current object and
    returns a pointer to it).
    
    Then replace all calls to the (monomorphic) Partition object copy
    constructor throughout the code, except in the clone() implementation
    itself, with calls to the new virtual clone() method "virtual copy
    constructor".
    
    Also have to make the Partition destructor virtual too [2][3] so that
    the derived class destructor is called when deleting using a base class
    pointer.  C++ supports this directly.
    
    [1] Wikibooks: More C++ Idioms / Virtual Constructor
        https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Virtual_Constructor
    
    [2] When to use virtual destructors?
        http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors
    
    [3] Virtuality
        Guideline #4: A base class destructor should be either public and
        virtual, or protected and nonvirtual
        http://www.gotw.ca/publications/mill18.htm
    
    Bug 759726 - Implement Partition object polymorphism
    
    SQUASH: When first using pointers to Partition and calling delete

2015-12-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace all Partition object copy assignment (#759726)
    
    Copy assignment of Partition objects is now only performed in a few
    places in the Operation and OperationResizeMove classes when updating
    the displayed PartitionVector.  (From Refresh_Visual() when each
    operation is visually applied to the display_partitions vector; the
    new_partition from the operation is copy assigned over the top of the
    relevant existing partition in the display_partitions vector).
    
    In general polymorphic copy assignment is complicated [1], and is now
    unnecessary given the above limited use.  All that is needed is a way to
    polymorphically replace one Partition object with another in a
    PartitionVector.
    
    First, prevent further use of Partition object copy assignment by
    providing a private declaration and no implementation, so the compiler
    enforces this.  Second implement and use PartitionVector method
    replace_at() which replaces a pointer to one Partition object with
    another at the specified index in the PartitionVector.
    
    [1] The Assignment Operator Revisited
        [Section:] Virtual assignment
        http://icu-project.org/docs/papers/cpp_report/the_assignment_operator_revisited.html
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use pointer to Partition in Dialog_Base_Partition and derived classes (#759726)
    
    Now use a pointer to the Partition object in Dialog_Base_Partition class
    and derived classes, Dialog_Partition_{Copy,New,Resize_Move}.  This is
    equivalent to how the Partition objects are managed in the Operation and
    derived classes.
    
    The Partition object is allocated and copy constructed in each derived
    classes' set_data() method, called from each constructor and deallocated
    in the destructors.  Considering the remaining Big 3, these classes are
    never copy constructed or copy assigned so provide private definitions
    and no implementations so the compiler enforces this.
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop unnecessarily coping a Partition in Dialog_Rescue_Data (#759726)
    
    The code in on_view_clicked() copy constructed a Partition object and
    then in the following 3 lines only read a couple of public member
    variables from the new copy.
    
    Making a copy of the partition is unnecessary.  Change to just creating
    a constant reference to the Partition instead.
    
    (It would also be an impediment to polymorphically using Partition
    objects, except for the fact that gpart doesn't recognise LUKS
    signatures so will never have to create a PartitionLUKS object).
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Change methods to use Partition pointers locally (#759726)
    
    A number of methods in GParted_Core and Win_GParted were using local
    Partition objects.  Change them into pointers so that Partition object
    polymorphism can be implemented.
    
    Bug 759726 - Implement Partition object polymorphism

2015-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Change copied_partition into a pointer (#759726)
    
    Change Win_GParted::copied_partition from Partition object which is
    copied by value into a pointer to a Partition object object which is
    allocated, copy constructed and deleted.  Required as part of the
    polymorphic implementation of Partitions.
    
    As before when managing the lifetime of pointers to objects in a class
    the Big 3 of destructor, copy constructor and copy assignment operator
    need to be considered.  A destructor is added to finally delete
    copied_partition.  A single Win_GParted object is only ever created and
    destroyed in main().  The class is never copy constructed or copy
    assigned.  Make the compiler enforce this with private declarations and
    no implementations.
    
    Bug 759726 - Implement Partition object polymorphism

2015-09-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use pointers to Partitions in Operation classes (#759726)
    
    Operation classes now internally use pointers to Partition objects and
    take on management of their lifetimes.  As before, with the
    PartitionVector class, when storing pointers in a class the Big 3 of
    destructor, copy constructor and copy assignment operator also have to
    be considered.
    
    First, all the Partition objects are allocated in the derived Operation*
    class parameterised constructors and freed in the associated
    destructors.  However the Operation classes are never copy constructed
    or copy assigned; they are only ever created and destroyed.  Only
    pointers to the derived Operations are copied into the vector of pending
    operations.  Therefore the copy construtor and copy assignment operator
    aren't needed.  To enforce this provide inaccessible private
    declarations without any implementation so that the compiler will
    enforce this [1][2].
    
    This example code fragment:
     1  OperationCheck o1( device, partition );
     2  OperationCheck o2 = o1;
     3  o2 = o1;
    Does these OperationCheck calls:
     1  Implemented parameterised construtor,
     2  Disallowed copy constructor,
     3  Disallowed copy assignment
    
    Trying to compile the above code would fail with errors like these:
        ../include/OperationCheck.h: In member function 'void GParted::Win_GParted::activate_check()':
        ../include/OperationCheck.h:36:2: error: 'GParted::OperationCheck::OperationCheck(const GParted::OperationCheck&)' is private
          OperationCheck( const OperationCheck & src );              // Not implemented copy constructor
          ^
        test.cc:2:21: error: within this context
          OperationCheck o2 = o1;
                              ^
    
        ../include/OperationCheck.h:37:19: error: 'GParted::OperationCheck& GParted::OperationCheck::operator=(const GParted::OperationCheck&)' is private
          OperationCheck & operator=( const OperationCheck & rhs );  // Not implemented copy assignment operator
                           ^
        test.cc:3:4: error: within this context
          o2 = o1;
             ^
    
    [1] Disable copy constructor
        http://stackoverflow.com/questions/6077143/disable-copy-constructor
    [2] Disable compiler-generated copy-assignment operator [duplicate]
        http://stackoverflow.com/questions/7823845/disable-compiler-generated-copy-assignment-operator
    
    Bug 759726 - Implement Partition object polymorphism

2015-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Protect partition members within Operation classes (#759726)
    
    The Operation classes contain partition objects which are copied by
    value.  Need to replace these with pointers to Partition objects instead
    and manage their lifetimes so that they can be used polymorphically.
    
    First step is to protect the partition members partition_new,
    partition_original, and for OperationCopy class only, partition_copied
    within the Operation classes and provide accessor methods.
    
    get_partition_new() and get_partition_original() accessors are
    implemented in the Operation base class so all derived classes get an
    implementation.  get_partition_new() is also virtual so that
    OperationCheck and OperationDelete can override the implementation and
    assert that they don't use partition_new.  get_partition_copied() is
    provided for the OperationCopy class only so can only be accessed via an
    OperationCopy type variable.
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove copy constructing add item methods from PartitionVector (#759726)
    
    Remove PartitionVector push_back() and insert() methods which copy
    construct Partitions objects into the vector.  All the code has already
    been changed to dynamically allocate Partition objects and use the
    adoption variants of these methods named, push_back_adopt() and
    insert_adopt().  Remove the no longer used methods.
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use Partition pointer adoption everywhere when adding items into a PartitionVector (#759726)
    
    Replace all the current code which uses push_back() and insert() of a
    local Partition object and gets it copy constructed into a
    PartitionVector.  Instead allocate a Partition object on the heap and
    adopt a pointer into the PartitionVector using push_back_adopt() and
    insert_adopt().
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Consolidate down to a single insert_unallocated() implementation (#759726)
    
    GParted_Core and Operation classes both have an insert_unallocated()
    method which do the same thing with very nearly identical code.  Both
    methods insert unallocated partitions into the vector of partitions
    within the specified range of sectors to fill in any gaps larger than
    1 MiB.  The only difference was how the two methods got the device path;
    the GParted_Core class method got it via a parameter and the Operation
    class method got it by calling get_path() on its device member variable.
    The GParted_Core insert_unallocated() method gets called during device
    scanning and the Operation one gets called when constructing the visual
    for a pending operation.
    
    Consolidate down to a single insert_unallocated() implementation by
    making the Operation class method call the GParted_Core class method.
    Make the GParted_Core class method static and public so that it can be
    called using the class name from outside the class.
    
    Bug 759726 - Implement Partition object polymorphism

2015-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add adoption methods for adding items into a PartitionVector (#759726)
    
    The current code uses push_back() and insert() to copy Partition objects
    into the vector of pointers.  This has a few issues:
    1) Unnecessary copying of Partition objects;
    2) Hides the nature of the PartitionVector class as a manager of
       pointers to Partition objects by providing copy semantics to add
       items.  It is generally better to be explicit;
    3) C++ doesn't provide polymorphic copy construction directly, but this
       is easily worked around by following the Virtual Constructor idiom
       [1], which would allow PartitionLUKS derived class objects to be
       copied into the vector.
    
    Add push_back_adopt() and insert_adopt() methods which add a pointer to
    a Partition object into the PartitionVector adopting ownership.
    
    [1] Wikibooks: More C++ Idioms / Virtual Constructor
        https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Virtual_Constructor
    
    Bug 759726 - Implement Partition object polymorphism

2015-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use pointers to Partitions in PartitionVector class (#759726)
    
    The PartitionVector class is now internally using pointers to Partition
    objects and taking on management of their lifetimes.  It therefore has
    to implement the Big 3: destructor, copy constructor and copy assignment
    operator [1][2].  This is because the implicitly-defined copy
    constructor and assignment operator perform memberwise "shallow copying"
    and the destructor does nothing.  This not correct for classes which
    contain non-class types such as raw pointers.
    
    The semantics of the interface still copies each Partition object into
    the PartitionVector when they are added with push_back() and insert().
    
    Note that a PartitionVector object is explicitly copy assigned in
    Win_GParted::Refresh_Visual().  They are also implicitly copied when
    (1) the implementing vector is resized larger to allow it to hold more
    pointers to Partition objects than it previously had capacity for; and
    (2) a Partition object is copied including the logicals PartitionVector
    member.
    
    [1] The rule of three/five/zero
        http://en.cppreference.com/w/cpp/language/rule_of_three
    [2] Rule of Three
        https://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29
    
    Bug 759726 - Implement Partition object polymorphism

2015-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Include Partition.h header everywhere it's used
    
    Lots of files which use the Partition class relied on the declaration
    being included via other header files.  This is bad practice.
    
    Add #include "Partition.h" into every file which uses the Partition
    class which doesn't already include it.  Header file #include guards are
    specifically to allow this.

2015-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use PartitionVector class throughout the code (#759726)
    
    Replace all occurrences of std::vector<Partition> with PartitionVector.
    
    Bug 759726 - Implement Partition object polymorphism

2015-11-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop returning vector of partitions from Dialog_Rescue_Data class (#759726)
    
    get_partitions() method was returning a vector of partitions.  However
    the calling code only needed to know whether any partitions were found
    or not.  Replace with found_partitions() method reporting the needed
    boolean.
    
    Now use of std::vector<Partition> partitions is hidden within the
    Dialog_Rescue_Data class implementation.
    
    Bug 759726 - Implement Partition object polymorphism

2015-05-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create PartitionVector class (#759726)
    
    Just creates PartitionVector class and includes it in partition.h so
    that it is built and validated by the compiler.  Not used anywhere yet.
    
    Implementation strategy is to create a PartitionLUKS class derived from
    the Partition class.  This implies polymorphism of Partition objects,
    which in C++ requires using pointers and references to objects, and not
    using objects directly.  (See C++ object slicing).  Later this
    PartitionVector class will be modified to use pointers to Partition
    objects and act as the owner of the pointed to Partition objects.
    
    Bug 759726 - Implement Partition object polymorphism

2016-01-25  Richard Hughes <richard@hughsie.com>

    Add a missing tag to the AppData file

2016-01-23  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2016-01-18  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2016-01-18  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.25.0   ==========

2016-01-18  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2016-01-16  Mario Blättermann <mario.blaettermann@gmail.com>

    Updated German doc translation

2016-01-14  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2016-01-13  Muhammet Kara <muhammetk@gmail.com>

    Updated Turkish translation

2016-01-13  Necdet Yücel <necdetyucel@gmail.com>

    Updated Turkish translation

2016-01-12  hanniedu <lafeber-dumoleyn2@zonnet.nl>

    Updated Dutch translation 0.25.0

2016-01-11  Sveinn í Felli <sv1@fellsnet.is>

    Updated Icelandic translation

2016-01-11  Rafael Fontenelle <rffontenelle@gmail.com>

    Updated Brazilian Portuguese translation

2016-01-08  Rafael Fontenelle <rffontenelle@gmail.com>

    Updated Brazilian Portuguese translation

2016-01-03  Curtis Gedak <gedakc@gmail.com>

    Revert tarball compression to gzip (#760099)
    
    Debian has deprecated the use of bzip2 for tarballs since dpkg-1.17.7,
    released 2014-04-21.   See:
    https://lintian.debian.org/tags/uses-deprecated-compression-for-data-tarball.html
    
    The choices going forward were to use gzip for maximum compatibility and
    speed, or to use xz for maximum compression.
    
    Since we strive for backwards compatibility, gzip was chosen.
    
    Bug 760099 - Revert tarball compression to gzip

2016-01-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add Linux SWRaid / mdadm note to the README file (#756829)
    
    Missed earlier when implementing the feature.
    
    Bug 756829 - SWRaid member detection enhancements

2015-12-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix displaying partition names also as file system labels in some cases (#759972)
    
    GParted was also displaying the GPT partition names as the file system
    labels for some type of file systems.
    
    Create 2 empty partitions on a GPT partitioned disk and name them like
    this.  Then create a hfsplus file system with an empty label.  (Actually
    single space character but blkid treats it as empty.  Can't use GParted
    for this because when no label is specified mkfs.hfsplus sets the label
    to "untitled").
    
        # sgdisk -p /dev/sdb
        /dev/sdb: 4194304 sectors, 2.0 GiB
        Logical sector size: 512 bytes
        ...
        Number  Start (sector)    End (sector)  Size       Code  Name
           1            2048          526335   256.0 MiB   8300  empty partition
           2          526336         1050623   256.0 MiB   8300  hfsplus partition
        # mkfs.hfsplus -v " " /dev/sdb2
    
    Even though only the GPT partition names are set to "SOMETHING
    partition", GParted will display them as the file system labels too.
    Also in the Information dialog for the empty partition a file system
    UUID is displayed as well even though none exists.
    
    Blkid output looks like this:
    
        # blkid -V
        blkid from util-linux 2.27.1  (libblkid 2.27.0, 02-Nov-2015)
        # blkid | grep /dev/sdb
        /dev/sdb1: PARTLABEL="empty partition" PARTUUID="bf3d2085-65b7-4ae6-97da-5ff968ad7d2c"
        /dev/sdb2: UUID="2c893037-ff76-38f2-9158-2352ef5dc8de" TYPE="hfsplus" PARTLABEL="hfsplus partition" PARTUUID="457e9c2b-e4f2-4235-833b-28208592aaac"
    
    With blkid from util-linux >= 2.22, released September 2012, it is
    including additional PARTLABEL and PARTUUID name and value pairs for
    GPT partitions [1].  The FS_Info module regular expressions used to
    match the file system LABEL and UUID names also happen to match these
    new PARTLABEL and PARTUUID names too.  Hence this bug when GParted has
    to fall back to using the FS_Info module to read the file system label,
    when there is no working file system specific method.  Effects: exfat,
    f2fs, hfs, hfsplus, ufs, unknown.
    
    Fix by requiring all the regular expressions used to search the blkid
    output to also match the space character in front of the name.
    
    [1] Util-linux 2.22 Release Notes
        https://git.kernel.org/cgit/utils/util-linux/util-linux.git/tree/Documentation/releases/v2.22-ReleaseNotes?h=v2.22
    
    Bug 759972 - GParted displays partition names also as file system labels
                 with new blkid for some file systems

2015-12-30  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2015-12-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix temporary path name of new partitions (#759488)
    
    In the UI new partitions were being named "unallocated" instead of
    "New Partition #1", etc.  Also deleting a new partition not yet created
    deletes all new partitions from the operation list because it matches
    by name only and they were all named "unallocated".  Broken by this
    recent commit:
    
        762cd1094aece03986226a39d1f6b4fecfd73ee9
        Return class member from Dialog_Partition_New::Get_New_Partition() (#757671)
    
    Prior to this commit in the create new partition dialog code did these
    relevant steps:
        Dialog_Partition_New::Get_New_Partition()
            Partition part_temp;
            ...
            part_temp.Set(..., "New Partition #%1", ...);
    
    Create local Partition object using default constructor which calls
    Partition::Reset() and clears the paths vector.  It then calls Set()
    which appends the new name making the vector:
        paths = ["New Partition #%1"]
    
    After the above commit the code did these steps:
        Dialog_Partition_New::Dialog_Partition_New(..., selected_partition, ...)
            set_data(..., selected_partition, ...);
                new_partition = selected_partition;
    
        Dialog_Partition_New::Get_New_Partition(...)
            new_partition.Set(..., "New Partition #%1", ...);
    
    New_partition is copied from the selected unallocated partition in which
    the new partition will be created.  So new_partition is now named
    "unallocated".  Then the Set() call appends the new name making the
    vector:
        paths = ["unallocated", "New Partition #%1"]
    
    As get_path() returns the first name in the paths vector the path name
    changed from "New Partition #%1" to "unallocated" causing this bug.
    
    Fix by resetting the new_partition object to clear all vestiges of it
    being a copy of the selected unallocated partition, Reset() call, before
    then calling Set().  This then appends the new name to an empty vector
    making it contain just the required new name:
        paths = ["New Partition #%1"]
    
    Bug 759488 - Pending create partitions are all getting named
                 "unallocated"

2013-03-02  Phillip Susi <psusi@ubuntu.com>

    Display progress for e2fsck (#467925)
    
    Parse output and update progress bar.
    
    Bug 467925 - gparted: add progress bar during operation

2013-03-02  Phillip Susi <psusi@ubuntu.com>

    Display progress for mke2fs (#467925)
    
    Bug 467925 - gparted: add progress bar during operation

2013-03-02  Phillip Susi <psusi@ubuntu.com>

    Display progress during resize (#467925)
    
    Capture and parse the progress reports of ntfsresize and resize2fs and
    update the dialog progress bar.
    
    Bug 467925 - gparted: add progress bar during operation

2015-11-19  Curtis Gedak <gedakc@gmail.com>

    Make about dialog website link non-clickable (#758131)
    
    To avoid security implications of invoking a web browser with root
    privileges, make the about dialog website link into a non-clickable
    label.
    
    The set_website_label() method has been available since gtkmm 2.6.
    https://developer.gnome.org/gtkmm/stable/classGtk_1_1AboutDialog.html#aa3d04115d068363be314414899703caa
    
    Bug 758131 - Don't run GUI as root (Was: [wayland] gparted fails to
                 start under wayland)

2015-10-14  Curtis Gedak <gedakc@gmail.com>

    Fix missing "old end" value in detail log of en_CA translation (#756878)
    
    The Canadian English translation po file incorrectly changed the
    following string with a parameter from %1 to %2:
    
       msgid "old end: %1"
       msgstr "old end: %2"
    
    The error resulted in a missing "old end:" numerical value in the
    gparted details log.
    
    This error was introduced back in 2011-09-06 with the following
    commit:
    
       06eeaafc8c73912a4df718c70af90f545fc3dd8c
       Updated Canadian English translation.
    
    Bug 756878 - GParted - Fix missing "old end" value in detail log of
                 en_CA translation

2015-11-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return reference from Get_New_Partition() (#757671)
    
    Return newly constructed partition object by reference rather than by
    copy from the Copy, Resize/Move and New dialog classes.  This is another
    case of stopping copying partition objects in preparation for using
    polymorphic Partition objects.  In C++ polymorphism has to use pass by
    pointer and reference and not pass by value, copying, to avoid object
    slicing.
    
    The returned reference to the partition is only valid until the dialog
    object containing the new_partition member is destroyed.  This is okay
    because in all three cases the returned referenced partition is copied
    into a context with new lifetime expectations before the dialog object
    is destroyed.
    
    Case 1: GParted_Core::activate_paste()
        Referenced new_partition is copied in the OperationCopy constructor
        before the dialog object goes out of scope.
    
        Operation * operation = new OperationCopy( ...,
                                                   dialog.Get_New_Partition( ... ),
                                                   ... );
    
    Case 2: GParted_Core::activate_new()
        Referenced new_partition is copied in the OperationCreate
        constructor before the dialog object goes out of scope.
    
        Operation * operation = new OperationCreate( ...,
                                                     dialog.Get_New_Partition( ... ) );
    
    Case 3: GParted_Core::activate_resize()
        Temporary partition object is copied from the referenced
        new_partition before the dialog object goes out of scope.
    
        Partition part_temp = dialog.Get_New_Partition( ... );
    
    Bug 757671 - Rework Dialog_Partition_New::Get_New_Partition() a bit

2015-11-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return class member from Dialog_Partition_New::Get_New_Partition() (#757671)
    
    Replace the use of local Partition variable with class member in
    preparation for Dialog_Partition_New::Get_New_Partition() being changed
    to return the new partition object by reference instead of by value.
        part_temp -> new_partition
    
    Bug 757671 - Rework Dialog_Partition_New::Get_New_Partition() a bit

2015-09-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create unallocated space within new extended partition after aligning boundaries (#757671)
    
    When creating a new extended partition, the unallocated space within it
    was being created before adjusting the partition boundaries for
    alignment reasons.  This must be wrong.  Move creation of the
    unallocated space to after adjusting the partition boundaries for
    alignment reasons.  First introduced by this commit:
    
        a30f991ca57453f29e2c3ad85c05be8e436fe860
        Fix size reduced by 1 MiB when created after cylinder aligned partition
    
    Also added a big FIXME comment explaining how further adjustments are
    still made by snap_to_alignment() to the partition boundaries including
    a test case where this too late adjustment causes overlapping boundaries
    and apply to fail.
    
    Bug 757671 - Rework Dialog_Partition_New::Get_New_Partition() a bit

2015-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename parameter to selected_partition in Dialog_Partition_New methods (#757671)
    
    This is just to make the parameter name in the Dialog_Partition_New
    constructor and set_data() method match the name of the equivalent
    parameter in the Dialog_Partition_Copy and Dialog_Partition_Resize_Move
    classes.  (All three classes inherit from Dialog_Base_Partition and have
    similar interfaces).
    
    Bug 757671 - Rework Dialog_Partition_New::Get_New_Partition() a bit

2015-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Always use blkid file system detection before libparted (#757781)
    
    Blkid recognises many more file system types and RAID member signatures
    than libparted.  GParted already uses blkid detection instead of or
    before libparted for whole disk devices [1] and for ext4 detection [2]
    (only required with libparted < 1.9.0).  Also GParted could only use
    blkid detection on non-512 byte sector devices [3] before libparted was
    fixed in version 3.2 [4].  Blkid was documented as a mandatory
    requirement from GParted 0.24.0 [5].
    
    Util-linux package, of which blkid command is a part, is a core piece of
    Linux software which is very actively maintained and used by lots of
    other packages.  Parted package is much less active and has added
    detection of fewer file systems and doesn't recognise any RAID members.
    
    In cases of multiple signatures within a partition blkid and libparted
    can report different results leading to confusion and issues for
    GParted.  This was the primary reason for bug 688882 "Improve clearing
    of file system signatures" and a number of other changes to GParted.
    Also as the mount command links with libblkid it uses it's detection
    when telling the kernel the type of a file system to be mounted.
    
    There aren't any current issues with GParted's file system detection but
    given the above argument, switch to using blkid before libparted for
    file system detection.  Only falling back to libparted when blkid
    doesn't report a result, notably for extended partitions.  Order of
    information sources for detection is now:
     1) mdadm (for SWRaid members)
     2) blkid
     3) libparted
     4) GParted internal code
    
    References:
    
    [1] f8faee637787329c07771e495c9b26abc9ac1603
        Avoid whole disk FAT being detected as MSDOS partition table (#743181)
    
    [2] 533eb1bc039455b734b9c1509e8fb588bdabc37e
        Added support for ext4 file systems
    
    [3] 9e5e9f5627e0fb1b547f07cdaaac773c7b6035b9
        Enhance file system detection to use FS_Info method - blkid
    
    [4] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=80678bdd957cf49a9ccfc8b88ba3fb8b4c63fc12
        Fix filesystem detection on non 512 byte sectors
    
    [5] 749a2495716a82a7287fad943109b6cfb927245c
        Document blkid command as a mandatory requirement (#753436)
    
    Bug 757781 - Always use blkid file system detection before libparted

2015-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correct inclusion of Operation* headers in GParted_Core.cc
    
    The GParted_Core code only interacts with derived Operation* objects
    through the Operation base class interface and in one case the
    OperationCopy class.  Therefore include Operation.h and OperationCopy.h
    headers and no others.

2015-10-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add clearing of ZFS labels
    
    ZFS labels were not cleared by GParted when clearing old file system
    signatures.
    
        # wget https://git.kernel.org/cgit/utils/util-linux/util-linux.git/plain/tests/ts/blkid/images-fs/zfs.img.bz2
        # bzip2 -dc zfs.img.bz2 > /dev/sdb1
        [In GParted format to cleared /dev/sdb1]
        # blkid /dev/sdb1
        /dev/sdb1: LABEL="tank" UUID="1782036546311300980" UUID_SUB="13179280127379850514" TYPE="zfs_member"
    
    Update to also zero all 4 ZFS labels.
    
    NOTE:
    GParted now writes a little over 1 MiB when clearing old file system
    signatures.  As this is performed in the main thread the UI is not able
    to respond during this action.  Testing this on a range of USB flash
    keys and hard drives found the slowest normal time to write this was
    0.25 seconds, with an occasional outlier up to 2.8 seconds from a USB
    flash key.  This is considered acceptable.

2015-10-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop over rounding up of signature zeroing lengths (#756829)
    
    Following the previous commit "Add erasing of SWRaid metadata 0.90 and
    1.0 super blocks (#756829)" signature zeroing specified to write 4 KiB
    of zeros at position end - 64 KiB, aligned to 64 KiB.  Example operation
    details from formatting a 1 GiB partition to cleared:
    
        Format /dev/sdb8 as cleared
        + calibrate /dev/sdb8
        + clear old file system signatures in /dev/sdb8
          + write 68.00 KiB of zeros as byte offset 0
          + wite 4.00 KiB of zeros at byte offset 67108864
          + wite 64.00 KiB of zeros at byte offset 1073676288
          + write 8.00 KiB of zeros at byte offset 1073733632
          + flush operating system cache of /dev/sdb
    
    However it actually wrote 64 KiB.  This is because the rounding /
    alignment was also applied to the zeroing length.  Before this commit
    rounding / alignment was always less than or equal to the length so this
    wasn't seen before.  Instead just apply device sector size rounding up
    to the length.
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add clearing of SWRaid metadata 0.90 and 1.0 super blocks (#756829)
    
    The super blocks for Linux Software RAID arrays using metadata types
    0.90 and 1.0 are stored at the end of the partition and not currently
    cleared by GParted.
    
    Create a SWRaid array, stop it and format it to cleared using GParted.
    The signature remains.
    
        # mdadm --create /dev/md1 --level=linear --raid-devices=1 --force --metadata=1.0 /dev/sdb1
        # mdadm --stop /dev/md1
        [In GParted format to cleared /dev/sdb1]
        # blkid /dev/sdb1
        /dev/sdb1: UUID="8ac947a7-063f-2266-5f2a-e5d178198139" UUID_SUB="49bd51d4-4c54-fb16-a45e-bd795f783f59" LABEL="rockover:1" TYPE="linux_raid_member"
    
    As fixed in other cases before [1][2] it is necessary to clear all
    signatures before formatting as a new file system to prevent recognition
    issues.  For example now format the partition as a FAT32 file system.
    Now there are two signatures and libparted reports one type and blkid
    reports another.
    
        # mkdosfs -F 32 /dev/sdb1
        # blkid /dev/sdb1
        /dev/sdb1: UUID="8ac947a7-063f-2266-5f2a-e5d178198139" UUID_SUB="49bd51d4-4c54-fb16-a45e-bd795f783f59" LABEL="rockover:1" TYPE="linux_raid_member"
        # parted /dev/sdb print
        Model: ATA SAMSUNG SSD UM41 (scsi)
        Disk /dev/sdb: 8012MB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start   End     Size    Type      File system  Flags
         1      1049kB  538MB   537MB   primary   fat32
    
    (Deliberately avoided btrfs, ext2/3/4 and xfs as recent versions of
    their mkfs tools clear other signatures first for the same reason).
    
    [1] Bug 688882 - Improve clearing of file system signatures
    [2] 3c75f3f5b103bc158b0f70ea63459aa362b0bab8
        Use wipefs to clear old signatures before creating new file systems (#688882)
    
    Update erase_filesystem_signatures() to also zero the necessary sectors
    to clear SWRaid metadata 0.90 and 1.0 super blocks.
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Handle unusual case of missing mdadm but SWRaid arrays active (#756829)
    
    If the installation is unusual / broken such that the mdadm command is
    not found but there are active SWRaid arrays, provide a fallback with
    some of the information.  In this case populate the cache with details
    only available from /proc/mdstat.  Information will be limited to active
    arrays only and their members.  No UUIDs or labels.  There will be no
    information about inactive arrays and GParted will use it's normal
    libparted and blkid identification for those devices and partitions.
    
    As mdadm has gained the capability to manage Fake/BIOS RAID arrays they
    also appear in /proc/mdstat when mdadm is used to start them.  Enhance
    the parser of /proc/mdstat to only extract information for SWRaid arrays
    with recognised metadata versions.
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure SWRaid_Info cache is loaded at least once (#756829)
    
    Automatically load the cache of SWRaid information for the first time if
    any of the querying methods are called before the first explicit
    load_cache() call.  Means we can't accidentally use the class and
    incorrectly find no SWRaid members when they do exist.
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Populate member mount point with SWRaid array device (#756829)
    
    Busy file systems are accessed via a mount point, LVM Physical Volumes
    are activated via the Volume Group name and busy SWRaid members are
    accessed via the array device, /dev entry.  Therefore choose to show the
    array device in the mount point field for busy SWRaid members.
    
    The kernel device name for an SWRaid array (without leading "/dev/") is
    the same as used in /proc/mdstat and /proc/partitions.  Therefore the
    array device (with leading "/dev/") displayed in GParted will match
    between the mount point for busy SWRaid members and the array itself as
    used in the device combo box.
    
        # cat /proc/mdstat
        Personalities : [raid1]
        md1 : active raid1 sda1[2] sdb1[3]
              524224 blocks super 1.0 [2/2] [UU]
        ...
        # cat /proc/partitions
        major minor  #blocks  name
    
           8        0   33554432 sda
           8        1     524288 sda1
        ...
           8       16   33554432 sdb
           8       17     524288 sdb1
        ...
           9        1     524224 md1
        ...
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use UUID and label of SWRaid arrays too (#756829)
    
    In cases where blkid wrongly reports a file system instead of an SWRaid
    member (sometimes confused by metadata 0.90/1.0 mirror array or old
    version not recognising SWRaid members), the UUID and label are
    obviously wrong too.  Therefore have to use the UUID and label returned
    by the mdadm query command and never anything reported by blkid or any
    file system specific command.
    
    Example of blkid reporting the wrong type, UUID and label for /dev/sda1
    and the correct values for /dev/sdb1:
    
        # blkid | egrep 'sd[ab]1'
        /dev/sda1: UUID="10ab5f7d-7d8a-4171-8b6a-5e973b402501" TYPE="ext4" LABEL="chimney-boot"
        /dev/sdb1: UUID="15224a42-c25b-bcd9-15db-60004e5fe53a" UUID_SUB="0a095e45-9360-1b17-0ad1-1fe369e22b98" LABEL="chimney:1" TYPE="linux_raid_member"
    
        # mdadm -E -s -v
        ARRAY /dev/md/1  level=raid1 metadata=1.0 num-devices=2 UUID=15224a42:c25bbcd9:15db6000:4e5fe53a name=chimney:1
           devices=/dev/sda1,/dev/sdb1
        ...
        ARRAY /dev/md127 level=raid1 num-devices=2 UUID=8dc7483c:d74ee0a8:b6a8dc3c:a57e43f8
           devices=/dev/sdb6,/dev/sda6
        ...
    
    NOTES:
    * In mdadm terminology the label is called the array name, hence name=
      parameter for array md/1 in the above output.
    * Metadata 0.90 arrays don't support naming, hence the missing name=
      parameter for array md127 in the above output.
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move busy detection of SWRaid members into the new module (#756829)
    
    Add active attribute to the cache of SWRaid members.  Move parsing of
    /proc/mdstat to discover busy SWRaid members into the cache loading
    code.  New parsing code is a little different because it is finding all
    members of active arrays rather than determining if a specific member is
    active.
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Detect Linux SWRaid members by querying mdadm (#756829)
    
    Detection of Linux SWRaid members currently fails in a number of cases:
    
    1)  Arrays which use metadata type 0.90 or 1.0 store the super block at
        the end of the partition.  So file system signatures in at least
        linear and mirrored arrays occur at the same offsets in the
        underlying partitions.  As libparted only recognises file systems
        this is what is detected, rather than an SWRaid member.
    
        # mdadm -E -s -v
        ARRAY /dev/md/1  level=raid1 metadata=1.0 num-devices=2 UUID=15224a42:c25bbcd9:15db6000:4e5fe53a name=chimney:1
           devices=/dev/sda1,/dev/sdb1
        ...
        # wipefs /dev/sda1
        offset               type
        ----------------------------------------------------------------
        0x438                ext4   [filesystem]
                             LABEL: chimney-boot
                             UUID:  10ab5f7d-7d8a-4171-8b6a-5e973b402501
    
        0x1fffe000           linux_raid_member   [raid]
                             LABEL: chimney:1
                             UUID:  15224a42-c25b-bcd9-15db-60004e5fe53a
    
        # parted /dev/sda print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sda: 34.4GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start   End     Size    Type      File system  Flags
         1      1049kB  538MB   537MB   primary   ext4         boot, raid
        ...
    
    2)  Again with metadata type 0.90 or 1.0 arrays blkid may report the
        contained file system instead of an SWRaid member.  Have a single
        example of this configuration with a mirrored array containing the
        /boot file system.  Blkid reports one member as ext4 and the other as
        SWRaid!
    
        # blkid | egrep 'sd[ab]1'
        /dev/sda1: UUID="10ab5f7d-7d8a-4171-8b6a-5e973b402501" TYPE="ext4" LABEL="chimney-boot"
        /dev/sdb1: UUID="15224a42-c25b-bcd9-15db-60004e5fe53a" UUID_SUB="0a095e45-9360-1b17-0ad1-1fe369e22b98" LABEL="chimney:1" TYPE="linux_raid_member"
    
        Bypassing the blkid cache gets the correct result.
    
        # blkid -c /dev/null /dev/sda1
        /dev/sda1: UUID="15224a42-c25b-bcd9-15db-60004e5fe53a" UUID_SUB="d0460f90-d11a-e80a-ee1c-3d104dae7e5d" LABEL="chimney:1" TYPE="linux_raid_member"
    
        However this can't be used because if a user has a floppy configured
        in the BIOS but no floppy attached, GParted will wait for minutes as
        the kernel tries to access non-existent hardware on behalf of the
        blkid query.  See commit:
            18f863151c82934fe0a980853cc3deb1e439bec2
            Fix long scan problem when BIOS floppy setting incorrect
    
    3)  Old versions of blkid don't recognise SWRaid members at all so always
        report the file system when found.  Occurs with blkid v1.0 on
        RedHat / CentOS 5.
    
    The only way I can see how to fix all these cases is to use the mdadm
    command to query the configured arrays.  Then use this information for
    first choice when detecting partition content, making the order: SWRaid
    members, libparted, blkid and internal.
    
    GParted shell wrapper already creates temporary blank udev rules to
    prevent Linux Software RAID arrays being automatically started when
    GParted refreshes its device information[1].  However an administrator
    could manually stop or start arrays or change their configuration
    between refreshes so GParted must load this information every refresh.
    On my desktop with 4 internal hard drives and 3 testing Linux Software
    RAID arrays, running mdadm adds between 0.20 and 0.30 seconds to the
    device refresh time.
    
    [1] a255abf3432ad106fac9c766f0816ada20be8e42
        Prevent GParted starting stopped Linux Software RAID arrays (#709640)
    
    Bug 756829 - SWRaid member detection enhancements

2015-10-27  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2015-10-27  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.24.0   ==========

2015-10-26  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2015-10-22  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian translation

2015-10-21  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Updated Swedish translation

2015-10-21  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-10-21  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2015-10-21  Jiri Grönroos <jiri.gronroos@iki.fi>

    Updated Finnish translation

2015-10-20  Claude Paroz <claude@2xlibre.net>

    Updated French help translation

2015-10-20  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2015-10-20  Daniel Șerbănescu <daniel@serbanescu.dk>

    Updated Romanian Translation

2015-10-20  Rafael Fontenelle <rffontenelle@gmail.com>

    Updated Brazilian Portuguese translation

2015-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Check usability of named device following a non-existent / invalid one (#756434)
    
    When multiple devices are named on the command line and (after sorting
    and removing duplicates) the device following a non-existent or invalid
    one is not checked for usability [1].  In most situations this isn't
    noticed as the device gets skipped at the "Searching ...  partitions"
    step instead.  However as seen in bug 755495 and commit [2]
    checking usability matters.
    
    For example (on CentOS 6.5) a large sector disk device can be edited
    when it follows a non-existent or invalid device named on the command
    line:
    
        # modprobe scsi_debug dev_size_mb=128 sector_size=4096
        # fgrep scsi_debug /sys/block/*/device/model
        /sys/block/sdd/device/model:scsi_debug
    
        # ./gpartedbin /dev/does-not-exist /dev/sdd
        ======================
        libparted : 2.1
        ======================
        Could not stat device /dev/does-not-exist - No such file or directory.
        Device /dev/sdd has a logical sector size of 4096.  Not all parts of GNU Parted support this at the moment, and the working code is HIGHLY EXPERIMENTAL.
    
        /dev/sdd: unrecognised disk label
    
    When erasing a device don't skip confirming the following device is
    usable.
    
    [1] Usable device as implemented by useable_device()
        Must not have a large sector size when GParted is built with an old
        version of libparted which doesn't support large sector sizes and
        must be able to read the first sector.
    
    [2] 362b2db331b4c31a978bb67232fa7f3ce9ab38c3
        Check disks named on the command line are safe to use too (#755495)
    
    Bug 756434 - GParted dumps core when passing non-existent or invalid
                 device on the command line

2015-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove non-existent or invalid devices from those named (#756434)
    
    A non-existent or invalid disk device named on the command line caused
    two libparted dialogs to be displayed repeatedly on every refresh.  This
    was because the device was only removed from the 'device_paths' vector
    when it wasn't usable [1]; not when it didn't exist or was invalid, when
    the libparted ped_device_get() call failed.  Fix this.
    
    [1] Usable device as implemented by useable_device()
        Must not have a large sector size when GParted is built with an old
        version of libparted which doesn't support large sector sizes and
        must be able to read the first sector.
    
    Bug 756434 - GParted dumps core when passing non-existent or invalid
                 device on the command line

2015-10-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent core dump with non-existent or invalid command line named device (#756434)
    
    Naming a non-existent or invalid disk device on the command line causes
    GParted to dump core.  Non-existent device looks like this:
    
        # ./gpartedbin /dev/does-not-exist
        ======================
        libparted : 2.4
        ======================
        Could not stat device /dev/does-not-exist - No such file or directory.
        Could not stat device /dev/does-not-exist - No such file or directory.
        Backtrace has 10 calls on stack:
          10: /lib64/libparted.so.0(ped_assert+0x31) [0x7fcfd10b3e61]
          9: /lib64/libparted.so.0(+0x3fdfc12a0c) [0x7fcfd10b4a0c]
          8: /home/mike/bin/gpartedbin-0.23.0-master-63-g23b5ba4() [0x455028]
          7: /home/mike/bin/gpartedbin-0.23.0-master-63-g23b5ba4() [0x455090]
          6: /home/mike/bin/gpartedbin-0.23.0-master-63-g23b5ba4() [0x4550d5]
          5: /home/mike/bin/gpartedbin-0.23.0-master-63-g23b5ba4() [0x46723f]
          4: /usr/lib64/libglibmm-2.4.so.1() [0x3ff5834a8d]
          3: /lib64/libglib-2.0.so.0() [0x3fe086a374]
          2: /lib64/libpthread.so.0() [0x3fdf407a51]
          1: /lib64/libc.so.6(clone+0x6d) [0x3fdf0e893d]
        Assertion (dev != NULL) at device.c:227 in function ped_device_open() failed.
        Aborted (core dumped)
    
    And with an invalid device the output looks like this:
    
        # ./gpartedbin /dev/zero
        ======================
        libparted : 2.4
        ======================
        The device /dev/zero is so small that it cannot possibly store a file system or partition table.  Perhaps you selected the wrong device?
        Error fsyncing/closing /dev/zero: Invalid argument
        The device /dev/zero is so small that it cannot possibly store a file system or partition table.  Perhaps you selected the wrong device?
        Error fsyncing/closing /dev/zero: Invalid argument
        Backtrace has 10 calls on stack:
        ...
        [Same as above]
    
    Bisected the cause to this commit from 2015-03-09 in GParted 0.22.0.  It
    claimed to make no functional change.  That turned out not to be true.
        51ac4d56489653854cd22787238a14bfa66a6ad4
        Split get_device_and_disk() into two (#743181)
    
    Fix by simply adding the missed if condition in get_device().
    
    Bug 756434 - GParted dumps core when passing non-existent or invalid
                 device on the command line

2015-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure DMRaid /dev entries are created before using named devices
    
    For probed DMRaid devices (when not using libparted DMRaid support)
    GParted waits up to 1 second for udev to have processed all events and
    created the /dev entries after starting each DMRaid array.  This was
    added by this commit from 2009-09-02:
        e7352a5000ddfc7666861e3e8ef56b88510b449d
        Ensure /dev file system device entries created before adding device
    
    Do the same for devices named on the command line too.

2015-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Sort command line named disk devices and remove duplicates (#755495)
    
    Order named disk devices so that they appear in the combo box in the
    same order which they would when probed.  Also remove duplicates so that
    the same disk devices aren't scanned multiple times and appear
    duplicated in the UI.
    
    Try this; it used to take ages to load and looked weird:
    
        # gparted /dev/sda /dev/sdb /dev/sda /dev/sdb /dev/sda /dev/sdb
    
    Bug 755495 - GParted allowing partitioning of large sector devices
                 specified on the command line, when built with old
                 libparted which doesn't support it

2015-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Check disks named on the command line are safe to use too (#755495)
    
    When probing for disk devices GParted ensures that libparted is capable
    of handling the sector size safely and that it is a real disk before it
    is shown in the UI.  However when disk devices are named on the command
    line none of these checks are performed.
    
    Libparted versions before v2.2 can only safely handle a sector size of
    512 bytes.  Therefore on old distributions with libparted < v2.2 GParted
    allows unsafe editing of disk devices with larger sector sizes when they
    are named on the command line.  Known to affect these distributions:
        RedHat/CentOS 5   (parted 1.8.1)
        RedHat/CentOS 6   (parted 2.1)
    
    For example (on CentOS 6.5) large sector disk device is ignored when
    probing:
    
        # modprobe scsi_debug dev_size_mb=128 sector_size=4096
        # fgrep scsi_debug /sys/block/*/device/model
        /sys/block/sdd/device/model:scsi_debug
    
        # gparted
        ======================
        libparted : 2.1
        ======================
        Device /dev/sdd has a logical sector size of 4096.  Not all parts of
        GNU Parted support this at the moment, and the working code is
        HIGHLY EXPERIMENTAL.
    
        Ignoring device /dev/sdd with logical sector size of 4096 bytes.
        GParted requires libparted version 2.2 or higher to support devices
        with sector sizes larger than 512 bytes.
    
    However when the device is named it is not ignored and can be edited:
    
        # gparted /dev/sdd
        ======================
        libparted : 2.1
        ======================
        Device /dev/sdd has a logical sector size of 4096.  Not all parts of
        GNU Parted support this at the moment, and the working code is
        HIGHLY EXPERIMENTAL.
    
        /dev/sdd: unrecognised disk label
    
    Apply the same validity checks to disk devices named on the command line
    as to probed ones.
    
    Bug 755495 - GParted allowing partitioning of large sector devices
                 specified on the command line, when built with old
                 libparted which doesn't support it

2015-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create new method GParted_Core::useable_device() (#755495)
    
    Abstract code checking sector size and ensuring the first sector of a
    candidate disk device can be read into new
    GParted_Core::useable_device() method.
    
    Bug 755495 - GParted allowing partitioning of large sector devices
                 specified on the command line, when built with old
                 libparted which doesn't support it

2015-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent 'index' may be used uninitialised warning in OperationDelete (#755214)
    
    I missed another case of 'index' may be used uninitialised warning in
    OperationDelete::apply_to_visual().  Indent a code block within an if
    clause so that the compiler can confirm that the 'index' local variable
    isn't used uninitialised.  Prevent this compiler warning:
        OperationDelete.cc: In member function 'virtual void GParted::OperationDelete::apply_to_visual(std::vector<GParted::Partition, std::allocator<GParted::Partition> >&)':
        OperationDelete.cc:34: warning: 'index' may be used uninitialized in this function
    
    Bug 755214 - Refactor operation merging

2015-10-07  Jiri Grönroos <jiri.gronroos@iki.fi>

    Updated Finnish translation

2015-10-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop including removed <sigc++/class_slot.h> header (#756035)
    
    Libsigc++2 version 2.5.2 and later removed header file
    <sigc++/class_slot.h>.  Quoting the NEWS file for version 2.5.2:
    
        Remove useless headers: sigc++/class_slot.h ...
    
    Libsigc++2 version 2.5.2 NEWS file:
    https://git.gnome.org/browse/libsigc++2/tree/NEWS?id=2.5.2
    
    Bug 756035 - GParted does not compile with newer gtkmm libraries in
                 Fedora 23

2015-10-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
    
    Glibmm 2.45.40 and later uses features in the ISO C++ 2011 standard.
    The NEWS file [1] says:
    
        Changes in 2.46 compared to 2.44:
    
        General:
        * Use, and require C++11, using features such as move operations,
          noexcept auto, = delete, nulltpr, override.
          (Murray Cumming, Kjell Ahlstedt)
    
    Also found this by Murray Cumming [2]:
    
        glibmm 2.45.40 requires C++11, both for its own build and by any
        apps that use it.  gtkmm also now requires C++11.
    
        I think you are seeing a symptom of building the application without
        C++11 support.  For instance, using CXXFLAGS="--std=c++11", though
        you'd be better of using an m4 macro such as
        AX_CXX_COMPILE_STDCXX_11().
    
    Without enabling C++11 compiler features, compilation of GParted with
    the latest glibmm library fails with errors such as these:
    
        /usr/include/glibmm-2.4/glibmm/ustring.h:267:14: error: expected ';' at end of member declaration
           ~ustring() noexcept;
                    ^
        /usr/include/glibmm-2.4/glibmm/ustring.h:267:14: error: 'noexcept' does not name a type
           ~ustring() noexcept;
                      ^
        /usr/include/glibmm-2.4/glibmm/ustring.h:267:14: note: C++11 'noexcept' only available with -std=c++11 or -std=gnu++11
    
    [1] glibmm NEWS file
        https://git.gnome.org/browse/glibmm/tree/NEWS?id=934e8290ce913b12e251ea617d0fc8ac53c385c6
    
    [2] https://bugs.launchpad.net/ubuntu/+source/glibmm2.4/+bug/1478367
    
    Bug 756035 - GParted does not compile with newer gtkmm libraries in
                 Fedora 23

2015-10-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Include local copy of Autoconf Archive macro AX_CXX_COMPILE_STDCXX_11 (#756035)
    
    Older distributions don't include Autoconf Archive at all and newer
    distributions don't always include it.  Therefore we have to have a
    local copy of the AX_CXX_COMPILE_STDCXX_11 macro with GParted.
    
    Bug 756035 - GParted does not compile with newer gtkmm libraries in
                 Fedora 23

2015-10-05  Seong-ho Cho <shcho@gnome.org>

    Updated Korean translation

2015-10-04  Curtis Gedak <gedakc@gmail.com>

    Provide credit for patch by Albert Young (#755608)
    
    Add recognition for work done by Albert Young to prevent a hang in
    GParted labeling FAT16/32 if label contained illegal characters.
    
    Bug 755608 - Labeling fat16/fat32 partitions hangs if certain
                 characters included in label

2015-09-29  Albert Young <youngac3@gmail.com>

    Remove prohibited characters from FAT16/32 labels (#755608)
    
    GParted waits forever when attempting to set a FAT16/32 file system
    label which contains prohibited characters [1][2].  This is because
    mlabel asks a question and is waiting for input.  Force cancelling the
    operation doesn't work either as GParted sends signal 2 (interrupt i.e.
    [Ctrl-C]) but mtools commands specifically ignores this and a number of
    other signals.  Have to kill mlabel with signal 9 (kill) to regain
    control of GParted.
    
    Mlabel command with prohibited characters in the label:
    
        # export MTOOLS_SKIP_CHECK=1
        # mlabel ::"MYLABEL/   " -i /dev/sdb10
        Long file name "MYLABEL/   " contains illegal character(s).
        a)utorename A)utorename-all r)ename R)ename-all
        s)kip S)kip-all q)uit (aArRsSq):
    
    Remove prohibited characters from FAT16/32 file systems labels when
    creating and labelling them.  Also upper case the label to meet label
    requirements [1][2].  This silently corrects the label and the actual
    label applied will be displayed when GParted refreshes after applying
    the operation.
    
    [1] Microsoft TechNet: Label
        https://technet.microsoft.com/en-us/library/bb490925.aspx
    
    [2] Replicated in Wikikedia: label (command)
        https://en.wikipedia.org/wiki/Label_%28command%29
    
    Bug 755608 - Labeling fat16/fat32 partitions hangs if certain characters
                 included in label

2015-09-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace Operation class members index and index_extended with local variables (#755214)
    
    These member variables store no Operation class information and were
    being used as local variables.  Replace with local variables.
    
    Also indent a code block within an if clause so that the compiler can
    confirm that the new local variable isn't used uninitialised.  Prevents
    this compiler warning:
        OperationResizeMove.cc: In member function 'void GParted::OperationResizeMove::apply_normal_to_visual(std::vector<GParted::Partition, std::allocator<GParted::Partition> >&)':
        OperationResizeMove.cc:125: warning: 'index' may be used uninitialized in this function
    
    Bug 755214 - Refactor operation merging

2015-09-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused index parameter from Add_Operation() (#755214)
    
    Since this commit earlier in the patchset the second optional parameter
    of method Win_GParted::Add_Operation() is no longer used.  Remove it.
        Replace open coded merge of resize/move into create operation
        (#755214)
    
    Bug 755214 - Refactor operation merging

2015-09-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix visually re-applying copy new operation in create-copy-grow-first sequence (#755214)
    
    This is the equivalent case fixed in the earlier commit, but now using
    copy/paste to create the second new partition rather than plain new.
        Fix visually re-apply create operation in create-create-grow-first
        sequence (#755214)
    
    Start with an existing partition as a copy source.  Then this sequence
    of operations will cause the copy partition to disappear from the disk
    graphic:
    1) create new #1,
    2) copy existing / paste into unallocated leaving space preceding,
    3) resize new #1 larger.
    
    There are two different types of copy operation.  The first is copy into
    unallocated space creating a new partition which needs treating the same
    as create new operation.  The second is copy into existing partition
    which needs treating the same as the other operations which don't change
    the boundaries of the partition.  Fix apply_to_visual() accordingly.
    
    Bug 755214 - Refactor operation merging

2015-09-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move code visually re-applying create operation into parent class (#755214)
    
    Move the code from OperationCreate::apply_to_visual() into new method
    Operation::insert_new() in the parent class.  This is in preparation for
    the following commit.
    
    Bug 755214 - Refactor operation merging

2015-09-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Share duplicate code substituting partitions in multiple operations (#755214)
    
    The apply_to_visual() method for the change UUID, format, label file
    system and name partition operations duplicated identical code.  This
    code was just substituting the partition in the disk graphic vector with
    the new partition recorded in the operation, as none of these operations
    change the partition boundaries.  Move this duplicate code into the
    parent class in new method Operation::substitute_new().
    
    Bug 755214 - Refactor operation merging

2015-09-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix visually re-applying create operation in create-create-grow-first sequence (#755214)
    
    After previous commit "Replace open coded merge of resize/move into
    create operation (#755214)" the second created partition would disappear
    from the disk graphic in the following sequence: create new #1, create
    new #2 leaving space preceding, resize #1 larger.  The create new #2
    operation still existed and was shown in the operation list.  It was
    just that it disappeared from the disk graphic.
    
    Remember that when each operation is created it records the partition,
    or the unallocated space, to which the operation is applied at the time
    the operation is created in the partition_original member variable.  In
    the above sequence the resize #1 larger operation was merged back into
    the create new #1 operation.  When visually re-applying the create
    new #1 operation to the disk graphic, it left a smaller unallocated
    partition following it.  This was smaller than the unallocated partition
    recorded in the create new #2 operation, hence it failed to visually
    re-apply to the disk graphic.
    
    The insight to fix this is that it doesn't matter what size the
    unallocated space was when the create new operation was constructed.  It
    only matters that the new partition to be created fits in the available
    unallocated space currently in the disk graphic.
    
    Bug 755214 - Refactor operation merging

2015-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add comment summarising current operation merging rules (#755214)
    
    This information is already documented in the existing comments
    associated with the calls to merge_operations() and assignments to the
    mergetype variables.  The table just summaries the rules together in one
    place.
    
    Bug 755214 - Refactor operation merging

2015-09-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace open coded merge of resize/move into create operation (#755214)
    
    For the case of resizing/moving a new, not yet created partition,
    activate_resize() open coded the merge operation.  Again this code has
    existed in GParted since before version 0.0.5 and the current code
    history in Git.
    
    Replace the necessary code so that an explicit merge_operations() call
    is used instead; along with the other case of resizing/moving an
    existing partition.
    
    NOTES:
    
    This commit changes the merge direction.  The old coded merged forward
    by removing the old create operation and adding a new create operation
    with the new size.  This was bad because with multiple pending create
    operations, each merged resize operation reordered those create
    operations.  Then when the operations were applied the partitions were
    created and therefore numbered in a different order to that shown in
    disk graphic.
    
    The new code merges backwards by updating the initial create operation
    with the new size.  This maintains the create operation order so that
    when applied the partitions are numbered in the same order as shown in
    the disk graphic.
    
    Bug 755214 - Refactor operation merging

2015-09-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace open coded merge of format into create operation (#755214)
    
    For the case of formatting a new, not yet created partition,
    activate_format() open coded the merge operation.  This code has existed
    in GParted since before version 0.0.5 and the current code history in
    Git.
    
    Replace the necessary code so that an explicit merge_operations() call
    is used instead; along with the other case of formatting an existing
    partition.
    
    Bug 755214 - Refactor operation merging

2015-09-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor merging rules into new merge_operations() (#755214)
    
    Creation of the various operations involved various implicit rules about
    how the different types of operations were merged in different cases.
    This was open coded in each ::activate_*() method.  Abstract this into
    new merge_operations() method and make the merging rules explicitly
    specified.
    
    NOTE:
    The removal of operation type checking in the MERGE_LAST_WITH_ANY cases
    is not a problem because all the Operation*::merge_operations() methods
    ensure the operation types match as part of the merge attempt.
    
    Bug 755214 - Refactor operation merging

2015-09-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename function to merge_two_operations() and update validation (#755214)
    
    Rename Win_GParted::Merge_Operations() to merge_two_operations().  To
    reflect what it does and in preparation for further refactoring of the
    code.
    
    Be more strict on the validation of the first and second indexes.  The
    first operation must also be before the second operation in the
    operation[] vector.  (It is actually a programming bug if first and
    second fail validation.  However so far g_assert() is only being used to
    validate pointers, which if wrong would likely cause the program to
    eventually crash when dereferenced later.  In this case a bug would
    merely cause the incorrectly specified pair of operations to not be
    merged).
    
    Move validate_display_partition_ptr() declaration in the header file to
    be in the same ordering as it's definition in the source file.
    
    Bug 755214 - Refactor operation merging

2015-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Encapsulate operation merging inside the Operation* classes (#755214)
    
    Win_GParted::Merge_Operations() method was modifying the internals of
    Operation* objects; in particular the partition_new member variable.
    This is breaking data hiding and encapsulation tenant of object oriented
    programming.
    
    Implement exactly the same operation merge semantics, but hide the
    manipulation of the internals of the Operation* objects within the
    Operation* classes themselves.
    
    Bug 755214 - Refactor operation merging

2015-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Better comment what each Merge_Operations() call is achieving (#755214)
    
    ... before refactoring the code.
    
    See the commit message from 2011-10-05 for details of what operations,
    available at that time, on the same partition can be merged and in what
    cases:
        b10349ae37df06b7bf7de91ea93a3913535ade3a
        Merge overlapping operations (#438573)
    
    Bug 755214 - Refactor operation merging

2015-09-26  Pedro Albuquerque <palbuquerque73@gmail.com>

    Updated Portuguese translation

2015-09-26  Pedro Albuquerque <palbuquerque73@gmail.com>

    Updated Portuguese translation

2015-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Localise checking for an extended partition into activate_new()
    
    As previous commit, display_partitions is now a Win_GParted member
    variable so checking for the existence of an extended partition can be
    localised where it is used.
    
    Remove index_extended member variable and localise the same checking in
    activate_new().

2015-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Localise counting of primary partitions into max_amount_prim_reached()
    
    Now that display_partitions is a Win_GParted member variable and
    therefore available throughout the class, since commit [1], calculation
    of primary_count can be localised in max_amount_prim_reached() where it
    is used.
    
    Implements a FIXME and removes primary_count as a member variable.
    
    [1] 545b75d9574e053cadb9ddd5cf15fc28181da87c
        Move vector of partition objects to a Win_GParted class member (#750168)

2015-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refresh copy source when its a logical partition too (#754827)
    
    Perform a copy, reformat source and paste sequence in GParted.  When the
    source is a primary partition everything works as expected, with the
    newly pasted partition reflecting the reformatted source.  However when
    the source is a logical partition GParted thinks it is pasting the
    original source, rather than the reformatted source.  The same is also
    true for other file system manipulation operations: resize, file system
    label and new UUID.  It is just that reformatting the source to a
    different file system type is the most obvious in the UI and causes the
    most significantly wrong actions to be performed.
    
    For example start with an ext4 logical partition, select it for copy,
    format it to xfs and paste into a new partition.  GParted thinks the
    second operation will create a copy of an ext4 file system instead of
    the xfs file system.  When applied the operation details are:
    
        Format /dev/sdd5 as xfs
        + calibrate /dev/sdd5
        + clear old file system signatures in /dev/sdd5
        + set partition type on /dev/sdd5
        + create new xfs file system
          + mkfs.xfs -f -L "" /dev/sdd5
        Copy /dev/sdd5 to /dev/sdd (start at 131.00 MiB)
        + calibrate /dev/sdd5
        + check file system on /dev/sdd5 for errors and (if possible) fix them
          + e2fsck -f -y -v -C 0 /dev/sdd5
              e2fsck: Subperblock invalid, trying backup blocks...
              Resize inode not valid.  Recreate? yes
              ...
              /dev/sdd5: ***** FILE SYSTEM WAS MODIFIED *****
        + create empty partition
        + set partition type on /dev/sdd6
            new partition type: ext4
        + copy file system of /dev/sdd5 to /dev/sdd6
            using internal algorithm
            ...
    
    GParted formatted sdd5 to xfs, but then the copy step ran e2fsck and
    managed to resurrect the ext4 file system and then performed a block
    copy of it to partition sdd6.  The copy step should have ran xfs_repair
    and used xfsdump | xfsrestore to copy the xfs file system.  Afterwards
    sdd5 contains both xfs and ext4 signatures.
    
        # wipefs /dev/sdd5
        offset               type
        ----------------------------------------------------------------
        0x438                ext4   [filesystem]
                             UUID:  f0ed4247-76db-4d93-b3bc-c7da4a70f95e
    
        0x0                  xfs   [filesystem]
                             UUID:  1ac8e7c3-0311-4c64-8e4a-b715a23ea0bd
    
    This has been broken at least as far back as GParted 0.1.0.
    
    Fix by simply refreshing the copy source partition object when it is a
    logical partition too, as well as when it is a primary partition.
    
    Bug 754827 - Copy, reformat source and paste a logical partition thinks
                 it's pasting the original file system

2015-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused public member variable FileSystem::success
    
    Assume accidentally added in commit:
        52a2a9b00a32996921ace055e71d0e09fb33c5fe
        Reduce threading (#685740)

2015-09-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement shell style exit status decoding (#754684)
    
    Command exit status is a 1 byte value between 0 and 255. [1][2]  However
    at the Unix API level the value is encoded as documented in the
    waitpid(2) manual page.  This is true for the Glib API too. [3]  This is
    why, for example, the comment in ext2::check_repair() reported receiving
    undocumented exit status 256.  It was actually receiving exit status 1
    encoded as per the waitpid(2) method.
    
    Add shell style exit status decoding [2] to execution of all external
    commands.   Return value from Utils::execute_command() and
    FileSystem::execute_command() functions are now:
        0 - 125 - Exit status from the command
        126     - Error executing the command
        127     - Command not found
        128+N   - Command terminated by signal N
        255     - Unexpected waitpid(2) condition
    Also adjust checking of the returned statuses as necessary.
    
    [1] Advanced Bash-Scripting Guide: Appendix D. Exit Codes With Special
        Meanings
        http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/exitcodes.html
    
    [2] Quote from the bash(1) manual page:
    
            EXIT STATUS
                ... Exit statuses fall between 0 and 255, though as
                explained below, the shell may use values above 125
                specially.  ...
    
                ... When a command terminates on a fatal signal N, bash uses
                the value of 128+N as the exit status.
    
                If a command is not found, the child process created to
                execute it returns a status of 127.  If a command is found
                but is not executable, the return status is 126.
    
    [3] Quote from the Glib Reference Manual, Spawning Processes section,
        for function g_spawn_check_exit_status():
        https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-check-exit-status
    
            The g_spawn_sync() and g_child_watch_add() family of APIs return
            an exit status for subprocesses encoded in a platform-specific
            way.  On Unix, this is guaranteed to be in the same format
            waitpid() returns, ...
    
    Bug 754684 - Updates to FileSystem:: and Utils::execute_command()
                 functions

2015-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Time and check commands setting fat16/32 labels and UUIDs (#754684)
    
    Replace open coding of the creation of the operation details for the
    mlabel command used to set the label and UUID with calls to
    FileSystem::execute_command() which will do it all.  This also results
    in the commands getting a time and check mark displayed in the operation
    details.
    
    Bug 754684 - Updates to FileSystem:: and Utils::execute_command()
                 functions

2015-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Time and check nearly all file system action commands (#754684)
    
    There has been an undocumented rule that external commands displayed in
    the operation details, as part of file system manipulations, only get a
    time and check mark displayed when multiple commands are needed, and not
    otherwise.  (GParted checks whether all commands are successful or not
    regardless of whether a check mark is displayed in the operation details
    or not).
    
    EXCEPTION 1: btrfs resize
    
    Since the following commit [1] from 2013-02-22, GParted stopped
    displaying the timing for the btrfs resize command in the operation
    details.  It being part of a multi-command sequence to perform the step.
    This is because FileSystem::execute_command() since the commit can only
    check the exit status for zero / non-zero while timing and checking the
    command status but btrfs resize needs to consider some non-zero statuses
    as successful.
    
    [1] 52a2a9b00a32996921ace055e71d0e09fb33c5fe
        Reduce threading (#685740)
    
    EXCEPTION 2: ext2/3/4 move and copy using e2image
    
    When use of e2image was added [2] the single command steps were timed
    and check.
    
    [2] 86111fe12a26d23d9fc2a9e2d19281290ecaf985
        Use e2image to move/copy ext[234] file systems (#721516)
    
    EXCEPTION 3: fat16/32 write label and UUID
    
    Uses Utils::execute_command() rather than FileSystem::execute_command()
    so can be separately changed.  See the following commit for resolution
    of the final commands not yet timed and check mark displayed.
    
    CHANGE:
    
    Lets make a simpler rule of always displaying the time and a check mark
    for all external commands displayed in the operation details.  However
    this makes several of the other single command actions need special exit
    status handling because zero success, non-zero failure is not correct
    for every case.  Specifically affects resizing of reiserfs and check
    repair of ext2/3/4, fat16/32, jfs and reiserfs.
    
    After this change all external commands run as file system actions must
    follow one of these two patterns of using the EXEC_CHECK_STATUS flag or
    separately calling FileSystem::set_status() to register success or
    failure of the command:
        exit_status = execute_command(cmd, od, EXEC_CHECK_STATUS...);
    or:
        exit_status = execute_command(cmd, od, ...);
        bool success = (exit_status == 0 || exit_status == OTHER_SUCCESS_VALUE...);
        set_status(od, success );
    
    Bug 754684 - Updates to FileSystem:: and Utils::execute_command()
                 functions

2015-08-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor flags in method FileSystem::execute_command() (#754684)
    
    Change the two optional boolean parameters into a single optional flags
    parameter which uses symbolically defined names.  Makes reading the
    execute_command() calls much easier to understand.  (Implemented as bit
    field using the same technique as used for Glib::SpawnFlags [1]).
    
    This changes the calls thus:
    
      execute_command(cmd, od)              -> (cmd, od)
      execute_command(cmd, od, false)       -> (cmd, od, EXEC_NONE)  // [2]
      execute_command(cmd, od, true )       -> (cmd, od, EXEC_CHECK_STATUS)
      execute_command(cmd, od, false, true) -> (cmd, od, EXEC_CANCEL_SAFE)
      execute_command(cmd, od, true , true) ->
                              (cmd, od, EXEC_CHECK_STATUS|EXEC_CANCEL_SAFE)
    
    [1] SpawnFlags bitwise operators in
        /usr/include/glibmm-2.4/glibmm/spawn.h.
    
    [2] False and EXEC_NONE are the default values for the optional third
        parameter before and after this change respectively and both mean
        the same.  This is being used in btrfs::resize() and being kept for
        now despite it being the default.
    
    Bug 754684 - Updates to FileSystem:: and Utils::execute_command()
                 functions

2015-08-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused execute_command_timed() (#754684)
    
    Use of execute_command_timed() was removed by this commit from
    2013-02-22:
        52a2a9b00a32996921ace055e71d0e09fb33c5fe
        Reduce threading (#685740)
    
    Bug 754684 - Updates to FileSystem:: and Utils::execute_command()
                 functions

2015-09-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise NVME devices (#755022)
    
    Add a pattern to recognise Non-Volatile Memory Express devices as valid
    devices to work with.  Devices are named by the Linux kernel device
    driver like /dev/nvme0n1 [1] with partitions named like /dev/nvme0n1p1
    [2].
    
    [1] linux 3.3 drivers/block/nvme.c nvme_alloc_ns()
        https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/block/nvme.c?id=v3.3#n1351
    
    [2] Contents of /proc/partitions for a partitioned NVME device
        $ grep nvme /proc/partitions
         259        0  390711384 nvme0n1
         259        1        977 nvme0n1p1
         259        2   31250000 nvme0n1p2
         259        3  328209496 nvme0n1p3
         259        4   31249408 nvme0n1p4
    
    Bug 755022 - gparted doesn't recognize nvme devices

2015-09-20  Stas Solovey <whats_up@tut.by>

    Updated Russian translation

2015-09-20  Curtis Gedak <gedakc@gmail.com>

    Provide overall credit for work done by Mike Fleetwood
    
    Add recognition for all the work done by Mke Fleetwood to improve
    GParted over the past several years.

2015-09-20  Curtis Gedak <gedakc@gmail.com>

    Provide credit for patch by Wrolf Courtney (#754649)
    
    Add recognition for work done by Wrolf Courtney to display LVM logical
    volumes.
    
    Bug 754649 - Display Logical Volumes in Volume Group of LVM2 Partition

2015-09-20  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2015-09-19  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2015-09-19  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2015-09-17  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2015-09-17  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2015-09-17  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-09-06  Wrolf Courtney <wrolf@wrolf.net>

    Display list of Logical Volumes in the Partition Information dialog (754649)
    
    Bug 754649 - Display Logical Volumes in Volume Group of LVM2 Partition

2015-09-09  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2015-09-07  Kjartan Maraas <kmaraas@gnome.org>

    Updated Norwegian bokmål translation from ProjectX.

2015-09-08  Seong-ho Cho <shcho@gnome.org>

    Updated Korean translation

2015-09-04  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2015-08-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix configuration version compare issue affecting libparted from GIT (#753525)
    
    When configuring GParted build with libparted from GIT it may perform
    the version compares incorrectly and think the version of libparted is
    higher that it actually is.  Libparted uses the number of commits from
    the last git tag as the third part of the version number.
    
    For example install libparted from one commit before release 3.1, 142
    commits after release 3.0.
        $ git checkout v3.1^
        $ describe
        v3.0-142-g82327a3
        $ ./bootstrap
        $ ./configure --prefix=/tmp/parted-3.0-git
        $ make && make install
    
    Configure GParted:
        $ export CPPFLAGS=-I/tmp/parted-3.0-git/include
        $ export LDFLAGS=-L/tmp/parted-3.0-git/lib
        $ export LD_RUN_PATH=/tmp/parted-3.0-git/lib
        $ export PKG_CONFIG_PATH=/tmp/parted-3.0-git/lib/pkgconfig
        $ ./configure
        ...
        checking for libparted >= 1.7.1 (querying pkg-config)... 3.0.142-8232
        checking for 2.0 <= libparted <= 3.0 (loop table creation doesn't delete old partitions)... (cached) no
        checking for libparted >= 2.2 (improved pt re-read)... (cached) yes
        checking for ped_file_system_resize in -lparted... no
        checking for ped_file_system_resize in -lparted-fs-resize... yes
        checking for libparted >= 3.2 (online resize)... (cached) no
        ...
    Libparted is reported as version 3.0.142, but checking of the version
    between 2.0 and 3.0 inclusive fails.
    
    The configure script is multiplying components of the version by 100
    when adding them together.
        $ echo 3.0.142-8232 | awk -F. '{print $1 * 10000 + $2 * 100 + $3}'
        30142
    
    So it is only allowing up to 99 commits before it is equivalent to the
    second minor number increasing by one.  Increase the multiplication
    factor to 10000, allowing up to 9999 commits between releases.  An order
    of magnitude more commits than so far seen between parted releases.
    
    Bug 753525 - Configuration issues when using non-system location or
                 non-released versions of libparted

2015-08-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix configuration version mismatch when using custom install of libparted (#753525)
    
    When configuring GParted build with a custom install of libparted the
    configure script is using the wrong version number for the version of
    libparted.  It uses the version of the system install of libparted,
    rather that the version of the specified custom install of libparted.
    
    For example configuring GParted build on CentOS 7 with system provided
    libparted 3.1 and custom install of libparted 3.2 from GIT in
    /tmp/parted-3.2-git:
        $ export CPPFLAGS=-I/tmp/parted-3.2-git/include
        $ export LDFLAGS=-L/tmp/parted-3.2-git/lib
        $ export LD_RUN_PATH=/tmp/parted-3.2-git/lib
        $ ./configure
        ...
        checking for libparted >= 1.7.1 (querying pkg-config)... 3.1
        checking for 2.0 <= libparted <= 3.0 (loop table creation doesn't delete old partitions)... (cached) no
        checking for libparted >= 2.2 (improved pt re-read)... (cached) yes
        checking for ped_file_system_resize in -lparted... no
        checking for ped_file_system_resize in -lparted-fs-resize... yes
        checking for libparted >= 3.2 (online resize)... (cached) no
        ...
        $ make
        $ ldd src/gpartedbin | fgrep libparted
            libparted-fs-resize.so.0 => /tmp/parted-3.2-git/lib/libparted-fs-resize.so.0 (0x00007f9a460ee000)
            libparted.so.2 => /tmp/parted-3.2-git/lib/libparted.so.2 (0x00007f9a45ea3000)
    Configure script used version 3.1 as reported by pkg-config to make most
    of the decisions (those version related checks with cached results) but
    the executable was still linked with the custom libparted 3.2 install.
    
    Temporarily rename the system libparted pkg-config file out of the way:
        # cd /usr/lib64/pkgconfig
        # mv libparted.pc libparted.pc-NOT
    and reconfigure the GParted build:
        $ ./configure
        ...
        checking for libparted >= 1.7.1 (querying pkg-config)... not found
        checking for libparted >= 1.7.1 (querying libparted)... 3.2.25-5a92
        checking for 2.0 <= libparted <= 3.0 (loop table creation doesn't delete old partitions)... (cached) no
        checking for libparted >= 2.2 (improved pt re-read)... (cached) yes
        checking for ped_file_system_resize in -lparted... no
        checking for ped_file_system_resize in -lparted-fs-resize... yes
        checking for libparted >= 3.2 (online resize)... (cached) yes
        ...
    Now configure is having to compile a program with the custom install of
    libparted and gets the correct version.
    
    Restore libparted pkg-config file:
        # mv libparted.pc-NOT libparted.pc
    and this time set environment variable PKG_CONFIG_PATH to inform
    pkg-config of the additional directory to search for .pc files before
    the default system location:
        $ export PKG_CONFIG_PATH=/tmp/parted-3.2-git/lib/pkgconfig
        $ ./configure
        ...
        checking for libparted >= 1.7.1 (querying pkg-config)... 3.2.25-5a92
        checking for 2.0 <= libparted <= 3.0 (loop table creation doesn't delete old partitions)... (cached) no
        checking for libparted >= 2.2 (improved pt re-read)... (cached) yes
        checking for ped_file_system_resize in -lparted... no
        checking for ped_file_system_resize in -lparted-fs-resize... yes
        checking for libparted >= 3.2 (online resize)... (cached) yes
        ...
    Now configure is getting the correct version of the custom install of
    libparted when querying pkg-config and thus making the correct
    decisions.
    
    Update the README file to reflect the need to also set the
    PKG_CONFIG_PATH environment variable when building GParted with a custom
    install of libparted.
    
    Bug 753525 - Configuration issues when using non-system location or
                 non-released versions of libparted

2015-08-12  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-08-10  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Updated Swedish translation

2015-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update names of the ntfs and reiserfs specific packages (#753436)
    
    The ntfs-3g package previously provided the FUSE based NTFS driver to
    mount the file system and ntfsprogs provided the user space tools.  In
    April 2011 the packages have merged [1] forming ntfs-3g_ntfsprogs.  Arch
    Linux / Debian / Slackware / Ubuntu now just have an ntfs-3g package
    with everything; where as CentOS / Fedora / openSUSE are sticking with
    the original two package names.  Reverse the order of the needed
    packages to:
    
        ntfs-3g / ntfsprogs
    
    [1] Release: NTFS-3G + NTFSPROGS 2011.4.12
        http://www.tuxera.com/release-ntfs-3g-ntfsprogs-2011-4-12/
    
    For reiserfs the upstream package is named reiserfsprogs.  Arch Linux /
    Debian / Slackware / Ubuntu use this name; but CentOS / Fedora name it
    reiserfs-utils and openSUSE names it just reiserfs.  Update the README
    file with all 3 package names.
    
        reiserfsprogs / reiserfs-utils / reiserfs
    
    In the File System Support dialog just use the first 2 package names as
    we don't want to make the dialog too wide with all 3 names and hopefully
    on openSUSE it is more obvious that the reiserfs package is needed to
    support the reiserfs file system.
    
    NOTE:
    Again this slightly increases the width of the File System Support
    dialog on my CentOS 6 desktop with default fonts, now from 676 to 707
    pixels.  Again still well within the 800 wide target and still narrower
    than the main window.
    
    Bug 753436 - Update documentation of GParted software dependencies

2015-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update name of the btrfs file system specific package (#753436)
    
    In Fedora bug report:
        Bug 1176108 - Warning shown on BTRFS partition because of missing btrfs-tools package
        https://bugzilla.redhat.com/show_bug.cgi?id=1176108#c0
    The user said:
        However there is no btrfs-tools package in the standard Fedora repo.
        There is a btrfs-progs package, which is already installed.  It's
        unclear whether this is a real error or simply a mismatched package
        name.
    
    The upstream software is named btrfs-progs.  Arch Linux / CentOS /
    Fedora / Slackware use the upstream name.  Debian / Ubuntu name it
    btrfs-tools and openSUSE calls it btrfsprogs (no dash).
    
    Rename the needed software to:
    
        btrfs-progs / btrfs-tools
    
    Upstream name first separated by slash from alternative names
    distributions use.
    
    NOTE:
    This slightly increases the width of the File System Support dialog on
    my CentOS 6 desktop with default fonts, from 655 to 676 pixels.  Still
    well within the 800 wide target and still narrower that the main window.
    
    Bug 753436 - Update documentation of GParted software dependencies

2015-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Document blkid command as a mandatory requirement (#753436)
    
    Update the README file to document the blkid command as a mandatory
    requirement for GParted.  GParted will run without blkid but it is
    needed to detect a number of file systems which libparted doesn't and in
    a number of other situations.
    
    Blkid is needed to detect these file systems:
        exfat
        f2fs
        ReFS
        SWRaid
        ZFS
    
    Blkid also detects these file systems (for which GParted has simple
    internal detection but libparted, mostly, doesn't detect):
        btrfs      (detected by libparted >= 3.2)
        LVM2 PV
        LUKS
        nilfs2     (detected by libparted >= 2.4)
        reiser4
    
    Blkid is also needed for these commits:
    
    1)  f8faee637787329c07771e495c9b26abc9ac1603
        Avoid whole disk FAT being detected as MSDOS partition table (#743181)
        (with libparted 1.9.0 to 2.3 inclusive)
    
    2)  9e5e9f5627e0fb1b547f07cdaaac773c7b6035b9
        Enhance file system detection to use FS_Info method - blkid
        (Detect file systems with sector sizes other than 512 bytes with
        libparted 2.2)
    
    Other changes to the DISTRIBUTION NOTES section of the README file:
    * Drop NOTE about vol_id and blkid being used to read volume labels for
      specific file systems and read the UUIDs.  Vol_id was deprecated in
      May 2009 and is not included in any currently supported distribution.
      Blkid is now mandatory.  List of optional commands at the end of the
      section seems to cover everything that is necessary.
    * Indent description of optional commands at the end of the section to
      match the indentation earlier in the section.
    * Line wrap the section at column 72 to match the rest of the file.
    
    Bug 753436 - Update documentation of GParted software dependencies

2015-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove "Skip setting unsupported partition flag" message
    
    This message would be displayed as part of the details for an operation
    to create or format a partition as LVM2 PV on a disk using partition
    table types dvh or pc98, which don't have an lvm flag.
    
     v Format /dev/sdb1 as lvm2 pv
       > calibrate /dev/sdb1
       > clear old file system signatures in /dev/sdb1
       > set partition type on /dev/sdb1
           Skip setting unsupported partition flag: lvm
       > create new lvm2 pv file system
    
    Translators found this message difficult to translate, as reported in
    bug 752901 - Add translator comment or fix string.  It is also only
    standard practice to set the lvm flag on partitions containing LVM2 PVs,
    and not required.  In hindsight reporting that an operation was skipped,
    when the operation is not a necessity, is probably bad practice as it
    could lead to uncertainty on behalf of the user and questions as to why
    the flag isn't supported.  Just remove the message.

2015-07-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Minor update of colours for LVM2 PVs and ReFS
    
    Correct the colour name comment for NILFS2.
    
    Colour for LVM2 PV was a Medium Brown.  This is close to Face Skin Dark
    from the GNOME colour palette.  Use this instead.
    
    Make colour for ReFS a bit darker so it is more distinct from the colour
    for NTFS.

2015-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add detection of ZFS (#752862)
    
    Requires blkid from util-linux >= 2.15, released May 2009, for
    detection of ZFS.
    
    Bug 752862 - ZFS is not recognised

2015-08-03  Rūdolfs Mazurs <rudolfsm@src.gnome.org>

    Updated Latvian translation

2015-08-03  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2015-08-03  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.23.0   ==========

2015-07-31  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2015-07-31  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2015-07-27  A S Alam <aalam@users.sf.net>

    Punjabi Translation updated

2015-07-27  Curtis Gedak <gedakc@gmail.com>

    Add translation comments for code section setting partition flag (#752901)
    
    Add translation comments to improve the clarity of some translatable
    text strings regarding setting partition flags.
    
    Bug 752901 - Add translator comment or fix string

2015-07-27  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2015-07-26  Josef Andersson <josef.andersson@gmail.com>

    Updated Swedish translation

2015-07-26  Josef Andersson <josef.andersson@gmail.com>

    Updated Swedish translation

2015-07-26  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2015-07-26  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2015-07-26  Daniel Șerbănescu <daniel@serbanescu.dk>

    Updated Romanian Translation

2015-07-23  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2015-07-20  Curtis Gedak <gedakc@gmail.com>

    Adjust pointers to prevent crash when resizing a logical partition (#752587)
    
    Opening the Resize/Move dialog on a logical partition causes GParted to
    crash.  This crash affects current GParted GIT HEAD, but does not affect
    GParted 0.22.0.  Git bisect identifies that it was broken with the
    following commit:
        Remove Set_Data() from the copy, resize/move and new dialog class APIs
        7a4a375ed629fea77995c98d13bd1992231be6fb
    
    The problem was trying to treat the reference display_partitions_ref
    like a pointer, and in particular on line 1732 trying to make it refer
    to the a different vector of partitions, .logicals sub-vector.
    
      1721  void Win_GParted::activate_resize()
      1722  {
      ...
      1726          std::vector<Partition> & display_partitions_ref = display_partitions;
      1727          if ( selected_partition_ptr->type == TYPE_LOGICAL )
      1728          {
      1729                  unsigned int ext = 0 ;
      1730                  while ( ext < display_partitions.size() && display_partitions[ext].type != TYPE_EXTENDED )
      1731                          ext++;
    * 1732                  display_partitions_ref = display_partitions[ext].logicals;
      1733          }
      1734
      1735          Dialog_Partition_Resize_Move dialog( gparted_core.get_fs( selected_partition_ptr->filesystem ),
      1736                                               *selected_partition_ptr,
      1737                                               display_partitions_ref );
    
    What was actually happening was that the .logicals sub-vector was being
    copied, replacing the display_partitions vector and freeing the original
    sub-vector.  This left selected_partition_ptr pointing to the original
    memory where the selected partition use to exist in the .logicals
    sub-vector.  At some point in the Dialog_Partition_Resize_Move class
    *selected_partition_ptr was referenced, accessing the freed memory.
    Crash soon followed.
    
    Fix by using a pointer instead of a reference, which can be assigned to
    point to a different object.
    
    Bug 752587 - GParted crashing when opening Resize/Move dialog on
                 logical partition

2015-07-21  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-07-14  Curtis Gedak <gedakc@gmail.com>

    Add libparted ped_file_system_resize thread to avoid blocking GUI (#737022)
    
    Since GParted commit 52a2a9b "Reduce threading (#685740)", released in
    GParted 0.15.0, application of operations occurs in the main thread
    running the UI, therefore long running libparted actions such as
    resizing a FAT16 or FAT32 file system hang the UI for as long as it take
    to complete the operation.
    https://git.gnome.org/browse/gparted/commit/?id=52a2a9b00a32996921ace055e71d0e09fb33c5fe
    
    Though this problem exists for all libparted actions, it is particularly
    noticeable when performing a large resize of fat16/fat32/hfs/hfs+ file
    systems.
    
    To address this significant cause of an unresponsive GUI, this
    enhancement adds threading to the libparted ped_file_system_resize
    function call.
    
    Bug 737022 - UI hangs while running libparted operations such as
                 FAT16/FAT32 resizing

2015-07-19  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Add image to Swedish documentation

2015-07-17  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2015-07-13  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-07-13  Stas Solovey <whats_up@tut.by>

    Updated Russian translation

2015-07-05  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2015-06-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remember result of searching the PATH for udevadm and udevsettle cmds
    
    GParted was also searching the PATH for the availability of the udevadm
    and udevsettle commands for every device with a busy partition during a
    refresh and for every applied operation effecting a partition table.  As
    with hdparm previously this was wasteful.
    
    Again, remember the result of searching the PATH at startup and refresh
    when clicking on the [Rescan For Supported Actions] button in the File
    System Support dialog.

2015-06-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remember result of searching the PATH for the hdparm command (#751251)
    
    Previously on every refresh for every device, GParted was searching the
    PATH to discover if the hdparm command existed.  Stracing GParted showed
    that calling Glib::find_program_in_path("hdparm") made the following OS
    calls:
        access("/usr/lib64/qt-3.3/bin/hdparm", X_OK) = -1 ENOENT (No such file or directory)
        access("/usr/local/sbin/hdparm", X_OK) = -1 ENOENT (No such file or directory)
        access("/usr/local/bin/hdparm", X_OK) = -1 ENOENT (No such file or directory)
        access("/sbin/hdparm", X_OK) = 0
        getuid()                    = 0
        stat("/sbin/hdparm", {st_mode=S_IFREG|0755, st_size=137, ...}) = 0
        stat("/sbin/hdparm", {st_mode=S_IFREG|0755, st_size=137, ...}) = 0
    
    The Linux VFS is very fast but repeatedly doing this is wasteful.
    Remember the result of searching the PATH for the hdparm command at
    startup and refresh this when the [Rescan For Supported Actions] button
    is pressed in the File System Support dialog.  This is the same as
    GParted already does for file system specific commands and their
    capabilities.
    
    Bug 751251 - Show serial number in device information

2015-06-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't hang reading binary data from command output (#751251)
    
    With a Kobo Touch eReader connected via USB, GParted would hang when
    scanning the device with this error written to the terminal:
    
        $ sudo src/gpartedbin
        ======================
        libparted : 2.3
        ======================
    
        (gpartedbin:10261): glibmm-CRITICAL **:
        unhandled exception (type Glib::Error) in signal handler:
        domain: g_convert_error
        code  : 1
        what  : Invalid byte sequence in conversion input
    
    The hdparm command was printing binary data as the serial number.
    Fragment of the 'hdparm -I /dev/sdf' output:
    
        # hdparm -I /dev/sdf
    
        /dev/sdf:
        SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
        ATAPI Optical card reader/writer, with non-removable media
                Model Number:       {BINARY_DATA}
                Serial Number:      {BINARY_DATA}
                Firmware Revision:  {BINARY_DATA}
    
    GParted reads command output using the Glib::IOChannel class.  However
    by default an IOChannel performs character set conversion on the data it
    reads, so when it came across an invalid byte sequence in the binary
    data the above exception was raised and the IOChannel::read() method
    never returned.  Hence GParted became stuck reportedly scanning the
    same device forever.  Code fragment:
    
    src/PipeCapture.cc
        49  bool PipeCapture::OnReadable( Glib::IOCondition condition )
        50  {
        ...
        58          Glib::ustring str;
    >>  59          Glib::IOStatus status = channel->read( str, 512 );
        60          if (status == Glib::IO_STATUS_NORMAL)
        61          {
        62                  for( Glib::ustring::iterator s = str.begin(); s != str.end(); s++ )
    
    Quote from the IOChannel class reference:
        https://developer.gnome.org/glibmm/stable/classGlib_1_1IOChannel.html
    
        Note that IOChannels implement an automatic implicit character set
        conversion to the data stream, and usually will not pass by default
        binary data unchanged. To set the encoding of the channel, use
        e.g. set_encoding("ISO-8859-15"). To set the channel to no encoding,
        use set_encoding() without any arguments.
    
    Fix by disabling the automatic character set conversion in the IOChannel
    used to read output from executed commands.
    
    Bug 751251 - Show serial number in device information

2015-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display device serial numbers (#751251)
    
    Run "hdparm -I /dev/DISK" to get the hard drive serial number of
    every device which has one and display it in the Device Information.
    The displayed value can either be the actual serial number, "none" or
    blank.  "none" means the device doesn't have a hard drive serial number,
    such as for Linux software RAID arrays, BIOS fake RAID arrays or USB
    flash drives.  Blank means something went wrong getting the serial
    number.  Either it couldn't be found in the hdparm output or the hdparm
    command wasn't installed.
    
    Example real hard drive:
        # hdparm -I /dev/sda
        ...
        ATA device, with non-removable media
                Model Number:       SAMSUNG HM500JI
                Serial Number:      S1WFJDSZ123732
        ...
    
    Example Linux software RAID array:
        # hdparm -I /dev/md127
    
        /dev/md127:
         HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
    
    On my desktop with 4 internal hard drives 2 Linux software RAID arrays
    on those hard drives, 2 USB flash drives and 1 USB hard drive attached,
    running hdparm 9 times added 0.07 seconds to the device refresh time.
    
    Bug 751251 - Show serial number in device information

2015-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Support changing the UUID of a btrfs file system (#751337)
    
    Btrfs-progs 4.1, released June 2015, includes support for changing the
    UUID of a btrfs file system using the btrfstune command.  Check for
    availability by looking for the -u option in the btrfstune help output.
    Use btrfstune like this:
    
        # umount /dev/sdb1
        # btrfstune -f -u /dev/sdb1
        Current fsid: e7ad5dba-d721-4f99-990b-1ba2901c8ad2
        New fsid: 231563d9-e173-410d-b1da-d34c4319a423
        Set superblock flag CHANGING_FSID
        Change fsid in extents
        Change fsid on devices
        Clear superblock flag CHANGING_FSID
        Fsid change finished
        # echo $?
        0
    
    Bug 751337 - btrfstune in btrfs-progs 4.1 supports changing the file
                 system UUID

2015-06-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Provide comment for btrfs::clear_cache() call
    
    Explain why the implementation uses a clear_cache() call, rather than a
    straight load_cache() call.  This commit from 2014-02-17 implemented
    incremental loading of the btrfs device cache:
        76e64f2905bdbe37c307bc9fab055f44914dc7b2
        Detect busy status of multi-device btrfs file systems (#723842)

2015-06-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Delay loading LVM2_PV_info cache until actually needed (#750582)
    
    The lvm query commands were always run and the cache loaded even if
    GParted, actually blkid, didn't identify any LVM2 PVs.  (GParted uses
    libparted and blkid to identify partition content and the lvm commands
    to provide the needed configuration details).
    
    Now implement complete lazy initialization of the cache.  Never force
    loading of the cache.  The cache is only loaded when the first value is
    accessed from it.  When there are no LVM2 PVs, the cache is never
    queried, so never loaded.  All the needed infrastructure for delayed
    loading was previously added by this commit from 2011-12-11:
        ff8ad0412057dd6644cd290a8affc71786b5d89f
        Lazy initialize the cache from querying LVM2 PVs (#160787)
    Every public member function which access values from the cache already
    calls initialize_if_required().  Just need to replace force loading of
    the cache with a function which just clears the cache.
    
    On my desktop, only when there are no LVM2 PVs, not loading the cache
    and therefore not executing these external commands in
    load_lvm2_pv_info_cache() saves 1.0 seconds of the 3.7 seconds it takes
    to perform the a refresh in GParted:
        lvm vgscan
        lvm pvs ... -o pv_name,...
        lvm pvs ... -o vg_name,...
    
    Bug 750582 - Refactor the LVM2_PV_Info module object interface and
                 internal cache representation

2015-06-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Parse LVM2_PV_Info cache into fields while loading (#750582)
    
    GParted used to cache the results of the "lvm pvs" commands used to query
    the state of the Logical Volume Manager as a series of lines of text.
    Then every time a particular value was queried GParted would split all
    the lines of text into fields until the required value was found.
    
    Stop this repeat splitting of cached lines of text.  Instead parse the
    lines of text into separate fields and store in structures of values of
    the correct type in the cache.
    
    Bug 750582 - Refactor the LVM2_PV_Info module object interface and
                 internal cache representation

2015-06-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop needing any LVM2_PV_Info objects (#750582)
    
    The LVM2_PV_Info cache had a pretend multi-object interface, yet all the
    data is static.  An LVM2_PV_Info object doesn't contain any member
    variables, yet was needed just to call the member functions.
    
    Make all the member functions static removing the need to use any
    LVM2_PV_Info objects.
    
    Bug 750582 - Refactor the LVM2_PV_Info module object interface and
                 internal cache representation

2015-06-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop borrowing the constructor to load the LVM2_PV_Info cache (#750582)
    
    An LVM2_PV_Info object contains no member variables as all the data is
    static (exists once in the program and accessed by all objects).  The
    constructor did nothing, except when passed true to load the cache.
    
    Provide a separate load_cache() member function and remove the
    constructors and destructor which do nothing.  The C++ compiler will
    provide a default constructor and destructor, which don't do anything as
    there are no member variables to initialise and finalise.
    
    This makes the interface a little easier to understand.  Mostly a step
    along the way of refactoring how the LVM2_PV_Info cache module works.
    
    Bug 750582 - Refactor the LVM2_PV_Info module object interface and
                 internal cache representation

2015-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove Set_Data() from the copy, resize/move and new dialog class APIs
    
    The copy, resize/move and new dialog classes (Dialog_Partition_Copy,
    Dialog_Partition_Resize_Move and Dialog_Partition_New respectively) had
    to be used like this:
    
        construct dialog object passing some parameters
        call Set_Data() to pass more parameters
        run() dialog
        call Get_New_Partition()
    
    There is nothing in the classes which forces Set_Data() to be called,
    but it must be called for the dialogs to work and prevent GParted from
    crashing.
    
    Make these class APIs safer by making it impossible to program
    incorrectly in this regard.  Move all the additional parameters from
    each Set_Data() method to each constructor.  The constructors just call
    the now private set_data() methods.

2015-05-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Dialog_Base_Partition member to new_partition
    
    The member variable was named selected_partition.  It is assigned from
    Win_GParted::selected_partition_ptr (which is a pointer to a const
    partition object so is never updated).  This gives connotations that it
    won't be modified.
    
    However it is updated freely as the new resultant partition object is
    prepared before being returned from the dialog, most notable in the
    Get_New_Partition() methods.
    
    Therefore rename from selected_partition to new_partition.

2015-05-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop copying selected_partition back on itself in the copy dialog (#750168)
    
    The code goes like this:
    
        Dialog_Partition_Copy::Get_New_Partition()
            call Dialog_Base_Partition::Get_New_Partition()
                Update this->selected_partition with results from running
                the dialog.
                return this->selected_partition by value.
            Save value back to this->selected_partition.
            Update this->selected_partition some more.
            return this->selected_partition by value.
    
    So there is an unnecessary copy of the partition object returned from
    the base class Get_New_Partition() function back to the same variable in
    the derived copy class Get_New_Partition() function.
    
    Need to keep the base class Get_New_Partition() function as derived
    class Dialog_Partition_Resize_Move uses that implementation as it
    doesn't override it, and it's part of the interface.
    
    Avoid this unnecessary copy by moving base class Get_New_Partition()
    code into a new private function, called prepare_new_partition(), which
    doesn't return anything.  Then have Get_New_Partition() in both classes
    just return the required partition object.  Like this:
    
        Dialog_Base_Partition::Get_New_Partition()
            call prepare_new_partition()
            return this->selected_partition by value.
    
        Dialog_Partition_Copy::Get_New_Partition()
            call Dialog_Base_Partition::prepare_new_partition()
            Update this->selected_partition some more.
            return this->selected_partition by value.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Shallow copy Device object into Operation object (#750168)
    
    When Operation objects are created they take a copy of the Device object
    to which the operation is to be applied.  The Device object includes a
    vector of all the contained Partition objects currently on the device,
    so these get copied too.
    
    These additional deep copied Partition objects in the Operation object
    are never accessed.  Therefore don't copy the contained Partition
    objects when copying the Device object into the Operation object.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop copying selected partition object in Manage Flags dialog (#750168)
    
    When opening the Manage Flags dialog, creation of the dialog object was
    creating a copy of the selected partition object.  If this was an
    extended partition it also included recursively constructing the
    contained logical partitions too.
    
    Instead, replace the partition object in the DialogManageFlags class
    with a reference to it.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop copying selected partition object in Information dialog (#750168)
    
    When opening the Partition Information dialog, creation of the dialog
    object was creating a copy of the partition object to be displayed.  If
    this was an extended partition it also included recursively constructing
    the contained logical partitions too.
    
    Instead, replace the partition object in the Dialog_Partition_Info class
    with a reference to it.
    
    NOTE:
    In C++ a reference is really just a pointer under the hood.  As such,
    dereferences of a pointer to an object in the context of needing a
    reference to the object doesn't copy the object.  It merely initialises
    the reference from the pointer.
    
    Specifically, with this prototype:
        Dialog_Partition_Info( const Partition & partition );
    and the dialog object being constructed in Win_GParted::activate_info():
        Dialog_Partition_Info dialog( *selected_partition_ptr );
    the partition object is not copy constructed.  A reference (pointer) to
    it is merely passed to the dialog constructor.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop copying displayed partition objects in activate_resize() (#750168)
    
    The first actions of Win_GParted::activate_resize() were to create a
    copy of the vector of partitions for the currently displayed device and
    visually apply any pending operations.  Exactly this has already been
    done in Win_GParted::Refresh_Visual() with the result now available in
    the member variable display_partitions.  Stop this unnecessary partition
    object copying and processing by just using display_partitions member
    variable instead.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Document how the GUI works and the lifetimes of important data (#750168)
    
    Document how GParted displays partitions in the GUI and manages the
    lifetime and ownership of that data.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Assert selected_partition_ptr is valid before use (#750168)
    
    Further ensure that a bug doesn't get introduced with the use of
    selected_partition_ptr, by asserting that it points to a current
    partition object in the vector of display partitions.
    
    After deliberately breaking the code so that selected_partition_ptr
    points to some other partition object, trying to display the Information
    dialog causes this crash:
    
    ======================
    libparted : 2.4
    ======================
    **
    ERROR:Win_GParted.cc:989:void GParted::Win_GParted::set_valid_operations(): assertion failed: (valid_display_partition_ptr( selected_partition_ptr ))
    Aborted (core dumped)
    
    At this point in the code:
    
        973  void Win_GParted::set_valid_operations()
        974  {
        ...
        986          // No partition selected ...
        987          if ( ! selected_partition_ptr )
        988                  return ;
    >>  989          g_assert( valid_display_partition_ptr( selected_partition_ptr ) );  // Bug: Not pointing at a valid display partition object
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Assert selected_partition_ptr is not NULL (#750168)
    
    Add Glib g_assert() to ensure that a bug doesn't get introduced which
    allows a partition callback to be called without a partition being
    selected first.
    
    After deliberately breaking the code so that selected_partition_ptr is
    not set, trying to display the Information dialog causes this crash:
    
        # ./gpartedbin
        ======================
        libparted : 2.4
        ======================
        ERROR:Win_GParted.cc:1978:void GParted::Win_GParted::activate_info(): assertion failed: (selected_partition_ptr != NULL)
        Aborted (core dumped)
    
    At this point in the code:
    
       1976  void Win_GParted::activate_info()
       1977  {
    >> 1978          g_assert( selected_partition_ptr != NULL );  // Bug: Partition callback without a selected partition
       1979
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Change selected partition into a pointer (#750168)
    
    Now that TreeView_Details and DrawingAreaVisualDisk classes store and
    pass pointers to partition objects in the Gtk signal callbacks, change
    the selected partition into a pointer too.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Store pointers to partition objects in DrawingAreaVisualDisk (#750168)
    
    This stops copying of each displayed partition object into the
    DrawingAreaVisualDisk class.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Store pointers to partition objects in TreeView_Details (#750168)
    
    This stops copying of each displayed partition object into the
    TreeView_Details class.
    
    It also stops copy constructing lots of partition objects when just
    clicking on a partition in the disk graphic.  The disk graphic needs to
    inform the main GUI and then the partition list which partition has been
    selected.  The call sequence goes like:
    
        DrawingAreaVisualDisk::on_button_press_event(event)
          Win_GParted::on_partition_selected(partition_ptr, src_is_treeview)
            TreeView_Detail::set_selected(partition_ptr)
              TreeView_Detail::set_selected(rows, partition_ptr,
                                            inside_extended)
    
    Relevant source and highlighted comparison line:
    
       140  bool TreeView_Detail::set_selected( Gtk::TreeModel::Children rows,
       141                                      const Partition * partition_ptr, bool inside_extended )
       142  {
       143          for ( unsigned int t = 0 ; t < rows .size() ; t++ )
       144          {
    >> 145                  if ( static_cast<Partition>( rows[t][treeview_detail_columns.partition] ) == *partition_ptr )
       146                  {
       147                          if ( inside_extended )
       148                                  expand_all() ;
       149
       150                          set_cursor( static_cast<Gtk::TreePath>( rows[ t ] ) ) ;
       151                          return true ;
       152                  }
       153
       154                  if ( set_selected( rows[t].children(), partition_ptr, true ) )
       155                          return true ;
       156          }
       157
       158          return false ;
       159  }
    
    Then in this function the partition selected in the disk graphic
    (partition_ptr parameter) is compared in turn with each partition object
    stored in the Gtk::TreeView model to find the matching one to mark it as
    selected.  This mere act of accessing the partition object stored in a
    row of the Gtk::TreeView model causes it to be copy constructed.  So
    clicking on the 5th partition in the disk graphic will copy construct
    the first 5 partition objects just to do a compare to find the matching
    one.
    
    This is because it is not possible to get a reference from a
    Gtk:TreeViewProxy in gtkmm.  Merely accessing a value in a Gtk::TreeView
    model takes a copy of that value.
    
        Subject: get a reference from a Gtk::TreeValueProxy
        http://comments.gmane.org/gmane.comp.gnome.gtkmm/2217
        http://marc.info/?t=104400417500001&r=1&w=4
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass by pointer in the signal_partition_selected callbacks (#750168)
    
    Change from passing a reference to the selected partition, to passing a
    pointer to the selected partition in the signal_partition_selected
    callbacks between the disk graphic, partition list and core GUI modules.
    
    This is an enabler for the following patches.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-05-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move vector of partition objects to a Win_GParted class member (#750168)
    
    Win_GParted::Refresh_Visual() used a local variable containing a copy of
    the vector of partitions in the current device to be displayed.  After
    visually applying pending operations it loaded copies of each partition
    object into the GUI widgets to display the disk graphic and partition
    list, DrawingAreaVisualDisk and TreeView_Details classes respectively.
    When a partition is selected in the UI, again a partition object is
    copied.  Also several of the partition dialogs, including the
    information dialog, take a copy of the partition object.  All these are
    copies of the same set of partition objects, those currently being
    displayed in the UI.
    
    Move the vector of displayed partitions from a local variable in
    Refresh_Visual() to a Win_GParted member variable.  This will allow for
    the above cases to be changed to used pointers and references to the
    same set of partition objects.
    
    The valid lifetime of pointers to elements in this partition object
    vector is from one refresh to the next, when the vector is cleared and
    repopulated with a new set of partition objects.  This is exactly what
    is needed as the GUI widgets are reloaded on each refresh, the selected
    partition is reset and none of the partition dialog objects exist.
    Dialog objects being created and destroyed on each use.
    
    On the other hand some copies of partition objects currently being
    displayed, still need to be made because they have lifetimes which need
    to last longer than the next call to Refresh_Visual().  Specifically the
    source of the copy partition and the partition objects copied into the
    in the list of pending operations.
    
    Bug 750168 - Reduce the amount of copying of partition objects

2015-06-01  Gábor Kelemen <kelemeng@openscope.org>

    Updated Hungarian translation

2015-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove cylinder size adjustments in the copy dialog (#749867)
    
    BUF in the copy dialog class, Dialog_Partition_Copy, is use to adjust
    limits in 2 cases:
    
    1) Minimum size when copying an XFS file system
    
    Minimum size was set to the used space + 2 * cylinder size (typically
    plus ~16 MiB).  This commit from 2004-12-20 added it:
        a54b52ea33abb1f5a44b52bcad5858ba41cd135d
        xfs copy now uses xfsdump and xfsrestore. icw some hacks in the other 2
    
    Issues:
    * This is increasing the minimum XFS file system size when copying it,
      which doesn't happen in the resize case for other file systems.
    * It allows an XFS file system to be created which is smaller than the
      minimum size allowed by GParted.  Copying an empty XFS file system can
      create a new file system as small as 26 MiB.  This is smaller than the
      minimum GParted allows of 32 MiB because that is the minimum
      xfs_repair can handle.
    
    Remove this addition when copying an XFS file system and enforce minimum
    file system size.
    
    2) Maximum size when copying a file system into empty space larger than
       it's maximum size
    
    Maximum size was set to maximum file system size - cylinder size
    (typically minus ~8 MiB).  Only applied to FAT16 which has a maximum
    file system size set in and can be grown.  Added by this commit from
    2004-12-15:
        10e8f3338d76e74c5fba22ff6c86888a67b99ae9
        :get_fs now returns a const reference. in copy and resizedialog
        ...
        * in copy and resizedialog filesystems with MAX set now have a max size of MAX - one cylinder .
    
    Issue:
    * This is applying a lower maximum resize when copying the file system
      compared to that when creating the file system.
      NOTE:
      GParted currently allows all file systems to be resize to any size,
      regardless of the maximum file system size.  This is probably an
      oversight, but it does allow libparted to convert FAT16 to FAT32 file
      system when resizing.
    
    Remove this lower maximum file system size when copying and resizing,
    compared to creating.
    
    Bug 749867 - Some limits are adjusted by arcane cylinder size amount
                 when copying and resizing in a single operation

2015-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove last trace of cylinder size adjustments in the resize dialog (#749867)
    
    This commit from 2010-05-20 removed use of cylinder size increase in the
    minimum, and cylinder size decrease in the maximum file system sizes
    from the resize/move dialog.
        e62a23b5b5f5dffff0bf83b0584bf33d0cc8e81e
        Add partition alignment option to align to MiB (#617409)
    
    This cylinder size limit adjustments were being performed using the
    Dialog_Base_Partition::BUF member variable.  Now in the
    Dialog_Partition_Resize_Move class it is never accessed, and only
    unnecessarily set.  Move BUF from the common base class into the
    Dialog_Partition_Copy class where it is still used.
    
    Bug 749867 - Some limits are adjusted by arcane cylinder size amount
                 when copying and resizing in a single operation

2015-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Small simplification of Win_GParted code which calls get_custom_text()
    
    Avoid long lines, long statements and repeated calls to
    gparted_core.get_filesystem_object( selected_partition.filesystem ) by
    storing the returned pointer in a local variable.
    
    Needs the previous commit so that the the local variable can be a
    pointer to a const FileSystem object instead of a pointer to a
    (modifiable) FileSystem object.

2015-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add const qualifier to get_custom_text() member functions
    
    The function never modifies any member variables so make it a const
    member function.
    
    (FileSystem::get_custom_text() is a virtual function so can't be made
    static).

2015-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename two GParted_Core methods to detect_filesystem*()
    
    Rename a couple of GParted_Core methods for consistency and to better
    distinguish get_filesystem() from get_filesystems() which do completely
    unrelated things.
    
      get_filesystem()                 -> detect_filesystem()
      recognise_filesystem_signature() -> detect_filesystem_internal()
    
    Also make detect_filesystem() a static member method as it doesn't use
    any member variables.  Requirement cascades to get_partition_path().

2015-04-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make GParted_Core methods flush_device(), get_device(), etc static
    
    GParted_Core methods:
        flush_device()
        get_device()
        get_disk()
        get_device_and_disk()
        destroy_device_and_disk()
        commit()
        commit_to_os()
        settle_device()
    
    This group of methods only call libparted API functions and run external
    executables.  None of them access any GParted_Core member variables.
    Make them all static member functions.

2015-04-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Tidy-up GParted_Core::init/fini_filesystems() function declarations
    
    These member functions are only used within the GParted_Core class and
    only operate on the static member variable FILESYSTEM_MAP.
    
    Make both functions private and also make init_filesystems() static.

2015-04-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix memory leak of FileSystem objects in init_filesystems() (#749036)
    
    The FileSystem objects stored in the FILESYSTEM_MAP are allocated once
    using new in init_filesystems() but never deleted.
    
    Valgrind output fragment:
    
        # valgrind --leak-check=full ./gparted
        ==29314== 353 (72 direct, 281 indirect) bytes in 1 blocks are definitely lost in loss record 6,287 of 6,905
        ==29314==    at 0x4A075FC: operator new(unsigned long) (vg_replace_malloc.c:298)
    >>  ==29314==    by 0x46EDA5: GParted::GParted_Core::init_filesystems() (GParted_Core.cc:106)
        ==29314==    by 0x46EC5F: GParted::GParted_Core::GParted_Core() (GParted_Core.cc:96)
        ==29314==    by 0x4A74F4: GParted::Win_GParted::Win_GParted(std::vector<Glib::ustring, std::allocator<Glib::ustring> > const&) (Win_GParted.cc:51)
        ==29314==    by 0x4D600A: main (main.cc:56)
        ...
        ==29314== 161 (72 direct, 89 indirect) bytes in 1 blocks are definitely lost in loss record 6,119 of 6,905
        ==29314==    at 0x4A075FC: operator new(unsigned long) (vg_replace_malloc.c:298)
    >>  ==29314==    by 0x46F50C: GParted::GParted_Core::init_filesystems() (GParted_Core.cc:124)
        ==29314==    by 0x46EC5F: GParted::GParted_Core::GParted_Core() (GParted_Core.cc:96)
        ==29314==    by 0x4A74F4: GParted::Win_GParted::Win_GParted(std::vector<Glib::ustring, std::allocator<Glib::ustring> > const&) (Win_GParted.cc:51)
        ==29314==    by 0x4D600A: main (main.cc:56)
    
    GParted_Core.cc source:
    
       102  void GParted_Core::init_filesystems()
       103  {
       104          FILESYSTEM_MAP[ FS_UNKNOWN ]         = NULL ;
       105          FILESYSTEM_MAP[ FS_CLEARED ]         = NULL ;
    >> 106          FILESYSTEM_MAP[ FS_BTRFS ]           = new btrfs() ;
       ...
    >> 124          FILESYSTEM_MAP[ FS_XFS ]             = new xfs() ;
       125          FILESYSTEM_MAP[ FS_BITLOCKER ]       = NULL ;
    
    Fix by deleting all FILESYSTEM_MAP pointers.  Note that delete on a NULL
    pointer is defined by C++ as a safe do nothing operation.
    
        C++ FAQ / Do I need to check for null before delete p?
        https://isocpp.org/wiki/faq/freestore-mgmt#delete-handles-null
    
    Fixing this reduces the valgrind reported definitely lost memory blocks
    count from 25 down to 6.  19 FileSystem objects deleted and 19 memory
    blocks no longer lost.
    
    Bug 749036 - FileSystem objects are memory leaked in init_filesystems()

2015-04-24  Daniel Șerbănescu <daniel@serbanescu.dk>

    Updated Romanian Translation

2015-04-22  Sveinn í Felli <sv1@fellsnet.is>

    Updated Icelandic translation

2015-04-22  Sveinn í Felli <sv1@fellsnet.is>

    Updated Icelandic translation

2015-04-18  Jordi Mas <jmas@softcatala.org>

    Fixes to Catalan translation

2015-04-07  Akom Chotiphantawanon <knight2000@gmail.com>

    Updated Thai translation

2015-04-01  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2015-03-29  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2015-03-28  GNOME Translation Robot <gnome-sysadmin@gnome.org>

    Updated Scottish Gaelic translation

2015-03-27  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-03-27  GNOME Translation Robot <gnome-sysadmin@gnome.org>

    Updated Scottish Gaelic translation

2015-03-26  Curtis Gedak <gedakc@gmail.com>

    Minor change to help manual caution when copying a partition (#746559)
    
    Bug 746559 - Various operations fail when following paste into existing
                 partition

2015-03-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor operation cases in apply_operation_to_disk() (#746559)
    
    Background:
    
    GParted_Core::calibrate_partition() reloads the partition path name and
    boundary to ensure they are correct before the operation is performed.
    (See comments in calibrate_partition() for the reasons why this is
    necessary).  This also displays details of the partition being modified
    in the operation details to inform the user.
    
    The operation object contains these relevant member objects:
    
      * partition_original
        Partition before the operation is applied.
    
      * partition_new
        Partition as it is intended to be after the operation has been
        applied.
    
      * partition_copied (for the copy operation only)
        Source partition being copied.
    
    Issues:
    
    GParted_Core::apply_operation_to_disk() was always calibrating partition
    object partition_original, but for about half the operations
    partition_original was not used and partition_new is used, so should be
    calibrated instead.
    
    Copy into an existing partition calibrated three partitions, the source,
    destination before and destination after the operation was applied.
    This doesn't really make sense in the operation details to the user.
    They would expect to only see the source and destination partitions and
    don't care about the distinction between the before and after
    representation of the destination.
    
    Minor issues:
    
    The previous fix had to copy the correct partition path from the
    calibrated partition_original object to the used partition_new object
    for the format, label file system, name partition and change uuid
    operations.
    
    Calibrate was called for the create operation too, even though the
    partition didn't yet exist.  It was a no-operation.
    
    Fix:
    
    Stop always calibrating the partition_original object and instead
    calibrate the correct partition object in each operation case.  For the
    copy into existing partition operation only calibrate the right two
    partition objects as the user would expect.
    
    Bug 746559 - Various operations fail when following paste into existing
                 partition

2015-03-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    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

2015-03-26  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-03-25  Stas Solovey <whats_up@tut.by>

    Updated Russian translation

2015-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Name partitions as required when creating a new partition (#746214)
    
    When the partition is named in the Create New Partition dialog, set the
    partition name as part of the create partition operation.  Currently
    this is only supported for GPTs.  See
    Utils::get_max_partition_name_length() for details.
    
    Bug 746214 - Partition naming enhancements

2015-03-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add partition name to Create New Partition dialog (#746214)
    
    Add a partition name entry box to the Create New Partition dialog.  The
    entry box is greyed out (not sensitive) for partition table types which
    don't support partition naming.  Currently only supported for GPTs.  See
    Utils::get_max_partition_name_length() for details.
    
    There was a slightly wider gap between the file system combobox row and
    the label entry row when there were only three widgets on the right hand
    side of the dialog.  This has been removed now that there are four
    widgets so that they are all evenly spaced and they line up with the
    four widgets on the left hand side.
    
    So far the partition name can be entered and previewed, but isn't yet
    applied to the disk.
    
    Bug 746214 - Partition naming enhancements

2015-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass Device object when setting up Dialog_Partition_New (#746214)
    
    Adding a partition name entry to the Create New Partition dialog will
    need access to these two Device methods: partition_naming_supported()
    and get_max_partition_length().  The Set_Data() function already takes
    two parameters, only_unformatted and disktype, taken from Device member
    variables.
    
    Rather than add two more parameters to the Set_Data() function pass the
    Device object instead, replacing the current only_unformatted and
    disktype parameters.
    
    Bug 746214 - Partition name enhancements

2015-03-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant Gtk::Entry calls in Create New Partition dialog
    
    This is a small tidy-up to remove Gtk::Entry method calls on the file
    system label entry box in the Create New Partition dialog which serve no
    purpose.
    
    filesystem_label_entry.set_activates_default( true );
        It trying to make the Create New Partition dialog automatically
        close  when Enter is pressed with focus in the label entry box.
        However this doesn't work, presumably because the default widget for
        the dialog is not the Add button.  Remove.
    
    filesystem_label_entry.set_text( partition.get_filesystem_label() );
        Initialises the text in the entry box with the file system label
        from the passed partition object.  The label is blank and the entry
        box defaults to blank.  Achieves nothing.  Remove.
    
    filesystem_label_entry.select_region( 0, filesystem_label_entry.get_text_length() );
        Highlights the empty text in the entry box.  Achieves nothing.
        Remove.
    
    NOTE:
    The same set of Gtk::Entry method calls in Dialog_FileSystem_Label() and
    Dialog_Partition_Name, which are editing the existing file system label
    and partition name respectively, do work and have a useful effect so
    shouldn't be removed.

2015-03-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member object to filesystem_label_entry (#746214)
    
    Rename Gtk::Entry object entry -> filesystem_label_entry in the
    Dialog_Partition_New class.  This is in preparation for the introduction
    of the partition name entry box in the Create New Partition dialog.
    
    Bug 746214 - Partition name enhancements

2015-03-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Preserve partition name in preview of format operation (#746214)
    
    Preview of the format operation cleared the partition name, yet when
    applied, the partition name reappeared.  Fix the preview to reflect
    reality.
    
    Bug 746214 - Partition naming enhancements

2015-03-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make support of naming for other partition table types possible (#746214)
    
    Previously partition naming had only been implemented for gpt.  Make the
    code ready to support naming of the other partition table types for
    which libparted supports naming.  Specifically: amiga, dvh, mac and
    pc98 in addition to gpt.  Document issues found with some of these
    partition table types, which can relatively easily been worked around.
    
    Leave support of naming for partition table types other than gpt
    disabled, mostly just to reduce ongoing testing effort, at least until
    there is any user demand for it.
    
    Bug 746214 - Partition naming enhancements

2015-03-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow partition naming on busy partitions (#746214)
    
    Allow partition names to be changed whether or not the partition is
    busy, rather than only when not busy, because it doesn't effect the busy
    file system or change the partition boundaries in any way.
    
    Bug 746214 - Partition naming enhancements

2015-03-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only set lvm partition flag on tables which support it (#746204)
    
    Attempting to create a new partition on a pc98 partition table fails
    with the following libparted error:
    
        The flag 'lvm' is not available for pc98 disk labels.
    
    This has been broken since LVM2 Physical Volume read-write support was
    first added in this commit:
    
        c3ab62591b73266f43b379d9a7aef3be13f3c384
        Add creation of LVM2 PVs (#670171)
    
    Fix by only clearing and setting the lvm partition flag when the type of
    the partition table supports it.  When creating a partition to contain
    an LVM2 PV and the lvm flag is not support add the following message to
    the operation results to explain that setting the lvm partition flag was
    skipped and why:
    
        Skip setting unsupported partition flag: lvm
    
    Bug 746204 - Creating partitions on pc98 table fails with lvm flag not
                 available

2015-03-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor set_partition_type() setting lp_partition earlier (#746204)
    
    Refactor GParted_Core::set_partition_type().
    
    1) Set lp_partition variable earlier and use a single if lp_partition
       set condition, rather than in both if conditions for the normal file
       system case and the LVM2 Physical Volume case.
    
    2) Stop calling Utils::get_filesystem_string() multiple times, instead
       save the result in a local variable.
    
    Tidies the code a little and reorders it in preparation for the
    following fix to only set the lvm partition flag when support, making
    that code change simpler.
    
    Bug 746204 - Creating partitions on pc98 table fails with lvm flag not
                 available

2015-03-23  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2015-03-23  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.22.0   ==========

2015-03-19  Cheng-Chia Tseng <>

    Updated Chinese (Taiwan) translation

2015-03-18  Stas Solovey <whats_up@tut.by>

    Updated Russian translation

2015-03-16  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-03-16  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-03-15  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2015-03-15  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2015-03-15  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2015-03-14  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2015-03-14  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2015-03-14  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2015-03-14  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian translation

2015-03-13  Samir Ribic <samir.ribic@etf.unsa.ba>

    Added Bosnian translation

2015-03-13  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2015-03-13  hanniedu <lafeber-dumoleyn2@zonnet.nl>

    Updated Dutch translation Master 3.16

2015-03-13  Sveinn í Felli <sv1@fellsnet.is>

    Updated Icelandic translation

2015-03-10  Curtis Gedak <gedakc@gmail.com>

    If available use udisks2-inhibit to prevent automounting (#745349)
    
    In order to prevent potential corruption of newly created file systems,
    when available use udisks2-inhibit with gpartedbin execution to prevent
    automounting.
    
    Original report:
    
    Xubuntu install fail due partition auto mount defeats Gparted
    https://bugs.launchpad.net/ubuntu/+source/thunar/+bug/1078445
    
    Some GNU/Linux distributions use the udisks2 "udisksd" daemon and have
    udisks2-inhibit at a known location.  The known location is not in the
    default PATH environment variable.
    
    One known distribution that matches this criteria is xubuntu 14.04.
    
    Interestingly neither kubuntu 14.04 nor ubuntu 14.04 appear to have the
    udisks2 "udisksd" daemon running and do not suffer from this specific
    automounting problem.
    
    Bug 745349 - gparted wrapper script needs updated for udisks2

2015-03-11  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-03-11  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-03-11  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2015-03-09  Curtis Gedak <gedakc@gmail.com>

    Update help manual for support of devices without partition tables (#743181)
    
    GParted now recognizes file system formats on disk devices without
    partition tables.  Update the manual with:
    
      - how to format a disk device without a partition table
      - manage flags not available for devices without partition tables
      - use format to cleared to delete a file system from an unpartitioned
        disk
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-03-10  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2015-01-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused device parameter from a few GParted_Core methods
    
    resize_move() and move() stopped using the device parameter in this
    commit from 2006-07-23:
        d663c3c277f60da2ac1785c039f25f7920a315e9
        removed cylindersize buffering during resize from the filesystems. It is
    
    create() stopped using the device parameter in this commit from 2006-03-19:
        ad9f2126e7fc92c16fffe839847dfe1c520146c8
        fixed issues with copying (see also #335004) cleanups + added FIXME added
    
    For reference most other operation methods had the device parameter
    removed in this earlier commit from 2005-12-07:
        642f0a145bc4b45a774dbf39e9cad4eb66afe56a
        from now on each partition has a reference to it's device. make use of new

2015-02-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix failure to recognise whole disk file systems in certain cases (#743181)
    
    When the following conditions were met GParted would fail to recognise a
    newly created whole disk device file system, and instead show an unknown
    file system filling the disk:
    
    1) Disk was previously partitioned and contained at least one partition.
    
    2) Using libparted version 2.0 to 3.0 inclusive.
    
    Initial status:
        # blkid | fgrep sdc
        # fgrep sdc /proc/partitions
           8       32  976762584 sdc
           8       33  104857600 sdc1
        # parted /dev/sdc
        GNU Parted 2.4
        Using /dev/sdc
        Welcome to GNU Parted! Type 'help' to view a list of commands.
        (parted) print
        Model: ATA ST1000LM024 HN-M (scsi)
        Disk /dev/sdc: 1000GB
        Sector size (logical/physical): 512B/4096B
        Partition Table: msdos
    
        Number  Start   End    Size   Type     File system  Flags
         1      1049kB  107GB  107GB  primary
    
    When creating the loop partition table libparted would not inform the
    kernel to delete the old partitions.  /proc/partitions still contained
    the details of the old partitions.
        (parted) mktable loop
        Warning: The existing disk label on /dev/sdc will be destroyed and
        all data on this disk will be lost. Do you want to continue?
        Yes/No? Yes
        (parted) print
        Model: ATA ST1000LM024 HN-M (scsi)
        Disk /dev/sdc: 1000GB
        Sector size (logical/physical): 512B/4096B
        Partition Table: loop
    
        Number  Start  End  Size  File system  Flags
    
        (parted) quit
        # fgrep sdc /proc/partitions
           8       32  976762584 sdc
           8       33  104857600 sdc1
    
    Creation of the whole disk device file system goes unnoticed by blkid
    because the kernel and therefore blkid's cache have stale partition
    information.
        # mkfs.xfs -f /dev/sdc
        # blkid | fgrep sdc
    
    NOTE:
    On a Linux Software RAID array, as opposed to a hard disk, blkid does
    notice creation of the whole disk device file system.  However the
    kernel still has old partition details.
    
    This was fixed in libparted 3.1 by commit:
    
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=f5c909c0cd50ed52a48dae6d35907dc08b137e88
        libparted: remove has_partitions check to allow loopback partitions
    
    Fix by deleting old partitions before creating the loop table when
    compiled with a broken version of libparted.  The GParted UI provides
    no feedback while a new partition table is created, and with some
    versions of GTK the UI become unresponsive too, so it is important to be
    as fast as possible.  Evaluated three different methods, deleting 15 and
    22 MSDOS partitions on a physical 5400 RPM hard drive using libparted
    2.4:
    
    M1) Delete and commit one partition at a time.
        Takes up to 24 seconds to delete 15 partitions.  With 22 partitions
        libparted always reports finding some of the partitions busy and
        unable to inform the kernel about the modifications.
        Too slow and doesn't work.
    
    M2) Delete all partitions in one go and commit once.
        Takes up to 1.4 seconds to delete either 15 or 22 partitions.  Never
        removes partitions 17 and higher from the kernel.
        Doesn't work.
    
    M3) Write GPT table (letting libparted delete any old partitions).
        Takes up to 0.8 seconds to delete either 15 or 22 partitions.
        Fast and works.
    
    Use method 3 - write a GPT table thus using libparted code to inform the
    kernel of the old partition deletions.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Workaround older blkid not distinguishing between FAT16 and FAT32 (#743181)
    
    Older versions of blkid don't correctly distinguish between FAT16 and
    FAT32 file systems when overwriting one with the other.  This effects
    GParted too with these file systems on whole disk devices where only
    blkid is used to recognise the contents.  See previous fix for why only
    blkid is used in this case:
        Avoid whole disk FAT being detected as MSDOS partition table
        (#743181)
    
    Example:
    
        # blkid -v
        blkid from util-linux 2.20.1 (liblkid 2.20.0, 19-Oct-2011)
        # mkdosfs -F16 -I /dev/md1
        # blkid | fgrep md1
        /dev/md1: SEC_TYPE="msdos" UUID="7C23-95D9" TYPE="vfat"
        # mkdosfs -F32 -I /dev/md1
        # blkid | fgrep md1
        /dev/md1: SEC_TYPE="msdos" UUID="7F93-98F4" TYPE="vfat"
    
    So blkid recognised the UUID changed but didn't remove the SEC_TYPE for
    the FAT32 file system.  See FS_Info::get_fs_type() as it uses this to
    distinguish between FAT16 and FAT32.  This is a caching update bug in
    blkid, because telling blkid not to use the cache gets the right
    results:
    
        # blkid -c /dev/null | fgrep md1
        /dev/md1: UUID="7F93-98F4" TYPE="vfat"
    
    With testing determined that blkid from util-linux 2.23 and later are
    not affected and earlier versions are affected.  Mostly recently known
    affected distribution is Ubuntu 14.04 LTS with util-linux 2.20.1.
    
    The straight forward fix would be to instruct blkid to not use its cache
    with 'blkid -c /dev/null'.  But using blkid's cache is needed to prevent
    blkid hanging for minutes when trying to access a non-existent floppy
    drive when the BIOS is set incorrectly.  See commit:
    
        18f863151c82934fe0a980853cc3deb1e439bec2
        Fix long scan problem when BIOS floppy setting incorrect
    
    Instead, when using an older affected version of blkid and when blkid
    cache reports a vfat file system, run blkid again bypassing the cache.
    The device is known to exist and contain a vfat file system, just not
    whether it is a FAT16 or FAT32 file system, so can't be a non-existent
    floppy device and won't hang.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid whole disk FAT being detected as MSDOS partition table (#743181)
    
    Libparted 1.9.0 to 2.3 inclusive, recognises whole disk device FAT file
    systems as MSDOS partition tables.  This causes GParted to do the same.
    
        # dd if=/dev/zero bs=1M of=/dev/md4
        # mkdosfs -F32 -v -I /dev/md4
        # blkid /dev/md4
        /dev/md4: UUID="53FE-31F2" TYPE="vfat"
    
        # parted /dev/md4
        GNU Parted 2.1
        Using /dev/md4
        Welcome to GNU Parted! Type 'help' to view a list of commands.
        (parted) print
        Model: Unknown (unknown)
        Disk /dev/md4: 536MB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start  End  Size  Type  File system  Flags
    
        (parted) quit
    
        # /tmp/parted24/bin/parted /dev/md4
        GNU Parted 2.4
        Welcome to GNU Parted! Type 'help' to view a list of commands.
        (parted) print
        Model: Linux Software RAID Array (md)
        Disk /dev/md4: 536MB
        Sector size (logical/physical): 512B/512B
        Partition Table: loop
    
        Number  Start  End    Size   File system  Flags
         1      0.00B  536MB  536MB  fat32
    
        (parted) quit
    
    This was fixed in libparted 2.4 by commit:
    
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=616a2a1659d89ff90f9834016a451da8722df509
        libparted: avoid regression when processing a whole-disk FAT partition
    
    Make GParted immune to this bug by moving blkid performed whole disk
    device file system detection before libparted partition detection.  Also
    have to always erase old file system signatures on whole disk devices
    when creating new partition tables to ensure that blkid doesn't detect
    those old signatures before libparted has a chance to detect the new
    partition table.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Erase file system signatures before creating a partition table (#743181)
    
    When writing "loop" partition table over the top of some whole disk
    device file system types GParted continued to show those whole disk
    device file systems rather than the virtual unknown partition from the
    "loop" partition table.
    
    This affected btrfs, jfs, reiser4 and reiserfs.  It occurred because of
    several factors:
    1) Libparted only zeroed the first and last 9.5 KiB (assuming 512 byte
       sectors) of the device before writing a new partition table.  See
       ped_disk_clobber().
    2) These file systems have their super blocks and therefore signatures
       after the first 9.5 KiB.
    3) Whole disk device file system detection is performed using blkid
       before checking for a libparted "loop" partition table.  See
       GParted_Core::set_devices_thread().
    
    Ref:
    libparted 3.2: disk.c:ped_disk_clobber()
    http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/disk.c?id=v3.2#n302
    
    Fix by always erasing any possible file system signatures on the device
    before creating a new "loop" partition table.
    
    NOTE:
    This is typically taking up to 0.5 seconds in my testing on a 5400 RPM
    hard drive, during which time the GParted UI is hung and the create
    partition table dialog shows the apply button pressed but no other
    progress indication.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Skip reading existing partition table before creating a new one (#743181)
    
    Creating a new partition table was getting libparted to read any
    existing partition table before creating a new partition table on the
    device.  This is an unnecessary step, and if the device didn't already
    contain a partition table also printed this error from libparted:
    
        /dev/sdb: unrecognised disk label
    
    Since get_device_and_disk() has been split into two, just call
    get_device() instead to just populate the PedDevice object representing
    the disk device.  Removes a small unnecessary step.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correct whole disk device file system format to cleared preview (#743181)
    
    The preview of clearing a whole disk device file system was previewing
    the same as formatting to all other file system types; as a cleared file
    system spanning the whole disk device.  However when implemented this
    removes all signatures on the disk so it actually becomes an unallocated
    and unpartitioned device.  Make the preview match what happens in when
    implemented.
    
    GParted previously used mydevice.max_prims = -1 to represent an
    unpartitioned device.  It is now represented as:
    
        mydevice.max_prims = 1
        mydevice.disktype  = _("unrecognized")
        mydevice.partitions[0].type         = TYPE_UNALLOCATED
        mydevice.partitions[0].whole_device = true
        mydevice.partitions[0].filesystem   = FS_UNALLOCATED
    
    and the check for an unpartitioned device in Win_GParted.cc becomes:
    
        partitions[0].type == TYPE_UNALLOCATED && partitions[0].whole_device
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make "loop" table appear as unknown whole device file system (#743181)
    
    Previously GParted displayed a device containing the parted "loop"
    partition table signature "GNU Parted Loopback 0" and nothing else, as
    an unrecognised device.
    
    Now make GParted display this as a virtual whole disk device partition
    with unknown contents, complete with the unable to detect a file system
    warning.  This change then allows a whole disk device file system to be
    created with the following two steps:
    1) Create "loop" partition table on a device;
    2) Format to required file system.
    
    GParted represents a whole disk device file system as:
    
        mydevice.max_prims = 1
        mydevice.disktype  = "none"
        mydevice.partitions[0].type         = TYPE_PRIMARY
        mydevice.partitions[0].whole_device = true
        mydevice.partitions[0].filesystem   = FS_EXT4  (example)
    
    Now represents just Parted's "loop" signature as:
    
        mydevice.max_prims = 1
        mydevice.disktype  = "loop"
        mydevice.partitions[0].type         = TYPE_PRIMARY
        mydevice.partitions[0].whole_device = true
        mydevice.partitions[0].filesystem   = FS_UNKNOWN
    
    And as before, an unpartitioned device as:
    
        mydevice.max_prims = -1
        mydevice.disktype  = _("unrecognized")
        mydevice.partitions[0].type         = TYPE_UNALLOCATED
        mydevice.partitions[0].whole_device = true
        mydevice.partitions[0].filesystem   = FS_UNALLOCATED
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make resize of whole disk file systems work (#743181)
    
    Only allow resizing, not moving of a whole disk device file system.
    There is no actual partition to move and moving a file system away from
    the start of a disk only makes it unrecognisable.
    
    Also don't perform the partition resize step as there's no actual
    partition to be resized.  Only the file system is being resized.
    (Libparted actually allows the virtual partition spanning a whole disk
    device to be resized, implementing it as a no-operation, but only for
    recognised file systems.  For unrecognised file systems it fails with
    "unrecognised disk label").
    
    Note that the existing resize dialog was designed for resizing partition
    boundaries, and their contained file systems, not for resizing file
    systems within a fixed boundary.  The difference is noticeable when
    there is unallocated space because the file system doesn't fill the
    whole disk device.  The dialog starts resizing a virtual partition the
    size of the whole disk device, not the actual size of the file system.
    Leave addressing this for a possible future update.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make copy into existing whole disk device file systems work (#743181)
    
    First, copying into a whole disk device fails on the set partition type
    step.  Fails with either libparted error "The flag 'lvm' is not
    available for loop disk labels" or "unrecognised disk label" depending
    whether libparted recognised the content and created a virtual partition
    or not.  (This is with libparted 2.4).
    
    Fix by just skipping setting the partition type on whole disk devices.
    
    Second, if any file system specific tools are used during the copy, they
    will fail because they are passed the device name as "copy of /dev/SRC"
    instead of "/dev/DST".  Occurs when either the destination whole disk
    device is not an identical size to the source so the file system check
    and grow steps are added, or when file system specific tools are used to
    copy the file system as with XFS or recent EXT2/3/4 tools.
    
    Fix by re-adding the real partition path from libparted for whole disk
    devices, as is already done for partitioned device names in
    GParted_Core::calibrate_partition().
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Force creation of reiserfs on whole disk devices (#743181)
    
    Creation of reiserfs file system fails in GParted with the this error.
    
        # mkreiserfs -f --label "" /dev/sdb < /dev/null
        mkreiserfs 3.6.24
    
        /dev/sdb is entire device, not just one partition!
        Continue  (y/n):
        # echo $?
        1
    
    Add second force flag, -f, to the mkreiserfs command to make it work.
    
    Bug 743181 - Add unpartitioned drive read-write support

2014-01-03  Phillip Susi <psusi@ubuntu.com>

    Force creation of ext2/3/4 and ntfs on whole disk devices (#683643)
    
    Creation of ext2/3/4 and ntfs file systems fails in GParted on whole
    disk devices with these errors.
    
        # mkfs.ext4 -L "" /dev/sdb < /dev/null
        mke2fs 1.42.9 (4-Feb-2014)
        /dev/sdb is entire device, not just one partition!
        Proceed anyway? (y,n)
        # echo $?
        1
    
        # mkntfs -Q -v -L "" /dev/sdc
        /dev/sdc is entire device, not just one partition.
        Refusing to make a filesystem here!
        # echo $?
        1
    
    Add force flag, -F, to both mkfs commands to make them work.
    
    Bug 683643 - Doesn't properly support partitionless drives.

2015-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make format work with whole disk devices (#743181)
    
    Formatting a whole disk device fails on the set partition type step with
    libparted error "unrecognised disk label".  This is because the previous
    step just cleared the old file system signatures leaving libparted with
    nothing to recognise.  Therefore libparted doesn't present a virtual
    "loop" partition table.
    
    As there is no partition table, there's no partition and no partition
    type.  Just skip setting the partition type on whole disk devices.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make clearing signatures work with whole disk devices (#743181)
    
    This enables Format to Cleared operation to succeed on whole disk device
    file systems even when libparted doesn't recognise the file system.
    
    (Turns out that making calibrate work in the previous commit happened to
    make Format to Cleared operation succeed, but only if libparted
    recognised the file system on the whole disk device).
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-02-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report either partition or device in operational results (#743181)
    
    In the operational results of the calibrate step include the type of the
    path GParted is working with, either partition or whole disk device.  Do
    the same for the create empty partition step too for consistency, even
    though it only ever creates partitions.  Looks like:
    
        create empty partition
          path: /dev/sdb3 (partition)
          start: 2099200
          end: 4196351
          size: 2097152 (1.00 GiB)
    
        calibrate /dev/sdc
          path: /dev/sdc (device)
          start: 0
          end: 1953525167
          size: 1953525168 (931.51 GiB)
    
    Makes it explicit to the users what GParted has detected.  Helps the
    developers when looking at saved results to understand what decisions
    were made and why specific steps were performed or not.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make calibrate work with whole disk devices (#743181)
    
    This enables the Check, Label and New UUID operations to succeed on
    whole disk device file systems even when libparted doesn't recognise the
    file system.
    
    This benefits reiser4 and lvm2 pv file systems with all versions of
    libparted, current version is 3.2, and for nilfs2 with libparted < 2.4.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Split get_device_and_disk() into two (#743181)
    
    get_device_and_disk() basically calls libparted to get a PedDevice
    object representing a disk device and a PedDisk object representing a
    partition table.  Re-implement get_device_and_disk() using two separate
    functions, get_device() and get_disk(), to get one of these objects
    each.
    
    No functionality changes with this commit.  It enables future commits to
    incrementally add support for whole disk devices into GParted without
    needing libparted to recognise the contents and create a virtual "loop"
    partition table.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Document workings of calibrate_partition() method
    
    Document the reasons why GParted_Core::calibrate_partition() needs to
    reload the device name and partition boundaries from libparted.

2014-12-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable operations on whole disk device virtual partitions (#743181)
    
    Enable operations on whole disk devices containing any recognised file
    system.
    
    The new partition operation on an empty whole disk device continues to
    display the "No partition table found on device /dev/DEVICE" information
    dialog.
    
    Specifically unsupported operations:
    
     *  Delete -
    
        Deletion of a partition only involves removal of the entry in the
        partition table leaving the file system intact on the disk.  However
        this doesn't work for a whole disk device file system.  Instead the
        file system signatures would have to be erased which is much more
        destructive and virtually impossible to undo.  Therefore don't
        implement whole disk device file system deletion.  Alternatives are
        to format the file system to cleared or create a partition table on
        the device.  Both of these imply overwriting the existing data and
        set the expectation that undo is not possible.
    
     *  Manage flags -
    
        There's no partition table, so there's no partition, so there's no
        flags.
    
    Resize/Move operation is being supported so that a whole disk device
    file system can be resized to handle devices which can be resize, such
    as those from SANs or Linux Software RAID arrays.  The start of the file
    system must remain fixed so move won't be allowed.
    
    So far only simple operations work if they don't need libparted support
    at all [1], or only need libparted support for the calibrate step AND
    the file system on the whole disk device is recognised by libparted [2].
    (Needs libparted to provide a "loop" partition, hence the recognition
    requirement, so that the calibrate step can successfully read the
    virtual "loop" partition table.  Doesn't matter whether it's an old
    version of libparted and it gets the name of the device wrong as GParted
    is already using the whole disk device name anyway).
    
    [1] Operations not needing any libparted support:
        Mount on, Unmount, Swapon, Swapoff, Activate and Deactivate
    
    [2] Operations only needing libparted support for the calibrate step:
        Check, Label, New UUID
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add whole_device flag to the partition object (#743181)
    
    Need to be able to take different actions in the GParted_Core partition
    manipulation methods and in Win_GParted UI methods to deal with
    libparted supported partitions or whole disk devices without a partition
    table.  Add boolean whole_device to the partition object and set
    appropriately to allow for this.
    
    Bug 743181 - Add unpartitioned drive read-write support

2015-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display failing activate/deactivate commands in error dialogs
    
    As was done with a failed mount operation, include the failed activate/
    deactivate command in the error dialog.  Two example error dialogs now
    look like this:
    
        (-) Could not deactivate swap
    
            # swapoff -v /dev/sdb7
            swapoff: /dev/sdb7: swapoff failed: Invalid argument
    
                                                        [  OK  ]
    
        (-) Could not unmount /dev/sdb6
    
            # umount -v "/mnt/6"
            umount: /mnt/6: not mounted
    
                               [  OK  ]

2015-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Second, try mounting file systems specifying the type (#742741)
    
    On RHEL/CentOS 6, GParted fails to mount nilfs2 file system like this:
    
        # mkfs.nilfs2 /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        mount: you must specify the filesystem type
    
    This fails because mount internally uses libblkid to determine the file
    system type when it is not specified on the command line.  However on
    RHEL/CentOS 6 libblkid is too old to recognise nilfs2.
    
    GParted used libparted recognition first and blkid second.  Mount only
    uses libblkid.  When there are multiple signatures on a partition
    GParted may report a different result to blkid alone.  Therefore fix by
    first trying to mount the file system without specifying the type, as is
    already done, and if that fails, trying specifying the file system type.
    This allows GParted to mount nilfs2 file systems.
    
        # mount -t nilfs2 /dev/sdb1 /mnt/1
        # mount | fgrep sdb1
        /dev/sdb1 on /mnt/1 type nilfs2 (rw,gcpid=30946)
    
    And for unsupported file systems the error dialog from the failed mount
    command shows both commands like this:
    
        (-) Could not mount /dev/sdb3 on /mnt/3
    
            # mount -v /dev/sdb3 "/mnt/3"
            mount: unknown filesystem type 'reiser4'
    
            # mount -v -t reiser4 /dev/sdb3 "/mnt/3"
            mount: unknown filesystem type 'reiser4'
    
                                             [  OK  ]
    
    Bug 742741 - Nilfs2 file system is unusable on RHEL/CentOS 6

2015-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add lookup for Linux kernel names of mountable file systems (#742741)
    
    Function Utils::get_filesystem_kernel_name() returns the name of the
    file system as needed for use in the mount command:
        mount -t TYPE DEVICE DIR
    
    Needed because the kernel / mount name is 'hfsplus' where as libparted /
    GParted, as reported by Utils::get_filesystem_string(), calls it 'hfs+'.
    So far just added debugging when mounting a file system to test the
    function works.
    
        # ./gartedbin
        ======================
        libparted : 2.1
        ======================
        DEBUG: (hfsplus) # mount -v /dev/sdb5 "/mnt/5"
        DEBUG: (nilfs2) # mount -v /dev/sdb1 "/mnt/1"
    
    Bug 742741 - Nilfs2 file system is unusable on RHEL/CentOS 6

2015-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Include failing mount command in the error dialog (#742741)
    
    On RHEL/CentOS 6 GParted fails to mount nilfs2 file system.  Include the
    failing file system mount command in the error dialog so the user knows
    what command failed.  The error dialog now looks like:
    
        (-) Could not mount /dev/sdc1 on /mnt/1
    
            # mount -v /dev/sdc1 "/mnt/1"
            mount: you must specify the filesystem type
    
                                               [  OK  ]
    
    Also stop telling the dialog that the secondary text contains pango
    markup as the command line and error message certainly isn't pango
    markup text.
    
    Bug 742741 - Nilfs2 file system is unusable on RHEL/CentOS 6

2015-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add GParted internal detection of nilfs2 (#742741)
    
    GParted can create a nilfs2 file system on RHEL/CentOS 6, yet both
    libparted and blkid are too old to recognise it when created.  Add
    GParted internal detection of nilfs2 file systems.
    
    Easy way to get the required signature needed to recognise nilfs2 is
    using wipefs to report the signature bytes it erases, using a more up to
    date distribution.  So using CentOS 7:
    
        # mkfs.nilfs2 /dev/sdb1
        # wipefs -a /dev/sdb1
        /dev/sdb1: 2 bytes were erased at offset 0x00000406 (nilfs2): 34 34
    
    Also from util-linux source libblkid/src/superblocks/nilfs2.c
        #define NILFS_SB_MAGIC 0x3434
    
    Bug 742741 - Nilfs2 file system is unusable on RHEL/CentOS 6

2014-12-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display libparted "loop" partition tables via "none" instead (#741430)
    
    For libparted recognised file systems covering the whole disk device,
    libparted reports the partition table as "loop".  With libparted 3.1 and
    earlier, the partition device was reported wrongly as /dev/sdb1, instead
    of /dev/sdb, by the ped_partition_get_path() call.  This causes GParted
    to fail to report file system usage, label and UUID, and busy status.
    Also multiple file system tool command errors from using the wrong
    device are displayed.
    
        # mkfs.ext4 -L whole-ext4 /dev/sdb
        # ./gpartedbin
    
    Example partition errors:
    
        e2label: No such file or directory while trying to open /dev/sdb1
        Couldn't find valid filesystem superblock.
    
        tune2fs 1.42.8 (20-Jun-2013)
        tune2fs: No such file or directory while trying to open /dev/sdb1
        Couldn't find valid filesystem superblock.
    
        dumpe2fs 1.42.8 (20-Jun-2013)
        dumpe2fs: No such file or directory while trying to open /dev/sdb1
        Couldn't find valid filesystem superblock.
    
        Unable to read the contents of this file system!
        Because of this some operations may be unavailable.
        This cause might be a missing software package.
        The following list of software packages is required for ext4 file
        system support: e2fsprogs v1.41+.
    
    This also breaks most of the manipulation operations, again because it
    is using the wrong device name.
    
    Fix by ignoring libparted's "loop" partition table and just let it get
    displayed via the "none" partition table mechanism.
    
    Doing this renders the direction taken in bug 683643 to make GParted
    work with libparted "loop" partition tables mute, as GParted no longer
    works with such partition tables.  Instead they are replaced by "none"
    partition tables within GParted.
    
        Bug 683643 - Doesn't properly support partitionless drives
        https://bugzilla.gnome.org/show_bug.cgi?id=683643
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set activate/deactivate partition menu item name earlier (#741430)
    
    So that, even though the menu item is greyed out, it is correctly named
    Activate or Deactivate for an LVM2 Physical Volume on a whole disk
    device, rather than the default Mount or Unmount.
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disable manipulation operations on "none" partition tables (#741430)
    
    At this time we are providing read-only support for file systems on
    whole disk devices.  Also all manipulation operations fail at the
    calibrate step with libparted error "unrecognised disk label", and
    manage flags is for real partitions only.
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display whole disk file systems via partition table "none" (#741430)
    
    For file systems which libparted recognises, when found on the whole
    disk device, it reports with partition table "loop" and a partition
    covering the whole disk.  GParted duly displays this to the user.
    
    For file systems which libparted doesn't recognise it reports
    "unrecognised disk label".  As of the latest libparted 3.2, these file
    system aren't recognised and can't currently be shown when on the whole
    disk device:
    
        BitLocker, Crypt LUKS, exFAT, F2FS, LVM2 Physical Volume,
        Linux Software RAID, ReFS, Reiser 4
    
    So only when libparted doesn't recognise a file system on the whole disk
    device and GParted does, either via blkid or it's internal code, display
    this with partition table "none".
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create helper function set_partition_label_and_uuid() (#741430)
    
    Move code which queries the file system label and UUID of a partition
    into a separate helper function.
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Support querying whole disk devices for signatures (#741430)
    
    Make GParted_Core::get_filesystem() capable of recognising file system
    signatures on whole disk devices.  Pass NULL for lp_partition to make it
    read signatures from the whole disk rather than a specific partition.
    Add debugging to test it works.
    
        # fgrep sdb /proc/partitions
           8    16    8388608 sdb
        # lvm pvcreate /dev/sdb
         Writing physical volume data to disk "/dev/sdb"
         Physical volume "/dev/sdb" successfully created
        # ./gpartedbin
        ======================
        libparted : 1.8.1
        ======================
        Unable to open /dev/sdb - unrecognised disk label.
        DEBUG: /dev/sdb (lvm2 pv)
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename local variable to fsname in get_filesystem() (#741430)
    
    Used 'fstype' as the name of local variable storing the FILESYSTEM
    enumeration type.
    
    'fs_type' was the name of the local variable storing the string with the
    name of the file system type.  Rename it to 'fsname' to distinguish it
    from the aforementioned variable.
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor GParted internal file system signature detection (#741430)
    
    Refactor GParted internal file system signature detection to remove code
    duplication.  There were 5 separate copies of code to: allocate a
    buffer, open, read and close the device, free the buffer and compare the
    signature.
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2014-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder crypt-luks detection (#741430)
    
    (1) Add recognition of LUKS signatures detected by blkid command, via
    the FS_Info cache.
    
    (2) Relocate internal GParted detection of LUKS signature to back after
    libparted and blkid identification.  This reverses previous commit:
    
        7695593d21a51422c230001083858e738b94c5e5
        Improve crypt-luks detection (#578300)
    
    Bug 578300 must have been caused by either: (1) reading stale data from
    the whole disk device, or (2) formatting as LUKS over the top of ext3
    leaving old signatures behind.  Case (1) has been resolved by commit:
    
        3bea067596e3e2d6513cda2a66df1b3e4fa432fb
        Flush devices when scanning to prevent reading stale signatures
        (#723842)
    
    Re-tested case (2) and find that no old signatures are left behind:
    
        # mkfs.ext3 /dev/sda8
        # wipefs /dev/sda8
        offset               type
        ----------------------------------------------------------------
        0x438                ext3   [filesystem]
                             UUID:  756dcd5f-73c5-4881-81ee-dc88e8b18f42
        # cryptsetup luksFormat /dev/sda8
        # wipefs /dev/sda8
        offset               type
        ----------------------------------------------------------------
        0x0                  crypto_LUKS   [crypto]
                             UUID:  de15ed1a-f461-46b7-803b-d0fd3b4bd680
    
    Bug 741430 - GParted cannot recognise LVM signature on unpartitioned
                 drive

2015-03-08  Josef Andersson <josef.andersson@gmail.com>

    Updated Swedish translation

2015-03-05  Stas Solovey <whats_up@tut.by>

    Updated Russian translation

2015-03-03  Marco Ciampa <ciampix@libero.it>

    Updated italian translation

2015-03-01  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2015-02-27  Γιάννης Κουτσούκος <giankoyt@gmail.com>

    Updated Greek translation

2015-02-22  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2015-02-21  Maria  Mavridou <mavridou@gmail.com>

    Updated Greek translation

2015-02-16  Muhammet Kara <muhammetk@gmail.com>

    Updated Turkish translation

2015-02-11  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2015-02-08  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2015-02-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix double quote error creating XFS file systems (#744108)
    
    Trying to create an XFS file system causes the following error and
    the create new xfs file system step to never complete.
    
        # ./gpartedbin
        ======================
        libparted : 2.4
        ======================
    
        (gpartedbin:15572): glibmm-CRITICAL **:
        unhandled exception (type Glib::Error) in signal handler:
        domain: g-shell-error-quark
        code  : 0
        what  : Text ended before matching quote was found for ". (The text was 'mkfs.xfs -f -L "mylabel" " /dev/sdb8')
    
    Creation of XFS file systems was broken by the extra stray double quote
    added to the command before the device name, by commit:
    
        63aeb150ace06f678241f514c550e51b22d2f823
        Rename member variables and methods in Partition class (#741424)
    
    Bug 744108 - Creating an XFS file system never completes

2015-02-03  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-01-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correct dialog title displaying libparted exceptions (#743825)
    
    Encountered this dialog:
    
        Libparted Bug Found!
    
        (-) Invalid argument during seek for read on /dev/md1
    
                              [ Retry ] [ Cancel ] [ Ignore ]
    
    After investigation found that GParted was asking libparted to read from
    sector -1.  Libparted was actually reporting an error but GParted was
    incorrectly displaying this as a bug.  This was because setting the
    dialog title was falling through from the error case to the bug case.
    Fix this.
    
    Also provide unique titles for all libparted exception types so that
    they can all be distinguished.
    
     *  List of exceptions from libparted: enum _PedExceptionType
        http://www.gnu.org/software/parted/api/group__PedException.html
    
    Bug 743825 - gparted displaying dialog: libparted bug found!

2015-02-03  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-02-03  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2015-02-01  Curtis Gedak <gedakc@gmail.com>

    Add Mike Fleetwood to menu_help_about

2015-02-01  Curtis Gedak <gedakc@gmail.com>

    Fix incorrect email address in help manual

2015-02-01  Curtis Gedak <gedakc@gmail.com>

    Provide credit for help manual enhancements by Mike Fleetwood

2015-02-01  Curtis Gedak <gedakc@gmail.com>

    Provide credit for patch by Michael Zimmermann
    
    Provide credit for patch to add support for GPT partition names.
    Also indicate significant effort by Sinlu Bes while we tried different
    ideas for how GPT partition name support should work.

2015-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Describe the name partition operation in the Manual (#741424)
    
    Bug 741424 - Add support for GPT partition names

2015-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use file system label terminology in the Manual (#741424)
    
    Update the GParted Manual to reflect the change in terminology from
    Partition Label to File System Label in the GParted GUI.  And make it
    explicit that it is the file system label in a partition being changed.
    
    Bug 741424 - Add support for GPT partition names

2014-12-12  Michael Zimmermann <sigmaepsilon92@gmail.com>

    Add support for GPT partition names (#741424)
    
    Embedded devices (Android) use GPT partition names to identify
    partitions, instead of file system labels.  Add support for viewing and
    changing them.
    
    As partition names are used to provide unique identification they are
    never copied when copying the contents of one partition to another.
    
    Note that GNU/Linux uses file system labels, UUIDs or device names for
    identification during the boot process and afterwards so while partition
    names can be used, they are optional and purely for user information.
    
    Bug 741424 - Add support for GPT partition names

2015-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant second if condition in Display_Info()
    
    Remove second inner if condition performing the same check as the outer
    if:
        partition.type != GParted::TYPE_UNALLOCATED

2014-12-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename class to Dialog_FileSystem_Label (#741424)
    
    class Dialog_Partition_Label   -> Dialog_FileSystem_Label
    file Dialog_Partition_Label.h  -> Dialog_FileSystem_Label.h
    file Dialog_Partition_Label.cc -> Dialog_FileSystem_Label.cc
    
    Bug 741424 - Add support for GPT partition names

2014-12-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename class to OperationLabelFileSystem (#741424)
    
    class OperationLabelPartition   -> OperationLabelFileSystem
    file OperationLabelPartition.h  -> OperationLabelFileSystem.h
    file OperationLabelPartition.cc -> OperationLabelFileSystem.cc
    
    Bug 741424 - Add support for GPT partition names

2014-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename methods in GParted_Core and Win_GParted classes (#741424)
    
    class GParted_Core:
        label_partition() -> label_filesystem()
    
    class Win_GParted:
        allow_label_partition()    -> allow_label_filesystem()
        activate_label_partition() -> activate_label_filesystem()
    
    Bug 741424 - Add support for GPT partition names

2014-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables and methods in Partition class (#741424)
    
    class Partition:
        have_label    -> have_filesystem_label
        label         -> filesystem_label
        label_known() -> filesystem_label_known()
        get_label()   -> get_filesystem_label()
        set_label()   -> set_filesystem_label()
    
    Bug 741424 - Add support for GPT partition names

2014-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename enum to OPERATION_LABEL_FILESYSTEM (#741424)
    
    This and the following few commits rename variables, methods, classes,
    etc from *label_partition* to *label_filesystem* so that the code also
    reflects that it is the label of the file system that is being modified
    and to separate it from the name partition operation about to be added.
    
    enum OPERATION_LABEL_PARTITION -> OPERATION_LABEL_FILESYSTEM
    
    Bug 741424 - Add support for GPT partition names

2014-12-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Partition Label to File System Label in the GUI (#741424)
    
    Rename the Partition Label concept to File System Label throughout the
    GUI.  This is to better reflect that it is the label of the file system
    that is being modified and to separate it from the Partition Name
    concept about to be added.
    
    Bug 741424 - Add support for GPT partition names

2015-01-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make swap usage match figures reported by swapon -s (#742647)
    
    GParted reports used figure of active swap space from 4 KiB upwards,
    actually 1 page, where as 'swapon -s' reports figures from 0 upwards.
    This is because GParted is counting the 1 page swap space overhead as
    used space.
    
        # sfdisk -s /dev/sdb1
        262144
        # mkswap /dev/sdb1
        # swapon /dev/sdb1
        # swapon -s
        Filename                Type            Size    Used    Priority
        /dev/sdb1               partition       262140  0       -1
    
    For this case GParted reports used as 4 KiB.
    (ptn size - swap size = 262144 - 262140 = 4)
    
    Instead make GParted report used figure without any overhead from 0
    upwards, matching what 'swapon -s' reports.
    
    Bug 742647 - Swap usage doesn't match figures reported by swapon -s

2015-01-26  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2015-01-26  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.21.0   ==========

2015-01-26  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2015-01-26  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2015-01-23  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2015-01-23  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2015-01-22  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Updated Swedish translation

2015-01-20  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2015-01-19  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-01-19  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2015-01-19  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian translation

2015-01-14  Phillip Susi <psusi@ubuntu.com>

    Fix off by one sector error in GParted internal block copy (#742920)
    
    GParted's internal block copy has an off by one sector bug when the
    source is before the destination; and the copy is performed backwards
    from high block to low block.  It is as though the source and
    destination partitions were both one sector earlier on the disk.
    
    In ASCII art it it looks like this:
    
    Initial layout:      x<--SRC--><--DST-->
    Actually wrote:               x<--SRC--
    Should have written:           <--SRC-->
    
    Affects moving partitions too.
    
    This bug has existed since commit:
    
        bd9e16f22fe3dfae73064369aadeda5de10b61be
        Thread the internal copy algorithm (#685740)
    
    Effectively the last sector of the partition is missed and one sector
    before the start of the partition is corrupted.  Most of the time file
    systems don't get around to using the very last sector so didn't notice.
    
    Bug 742920 - GParted internal copy is overstepping partition boundaries

2015-01-12  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2015-01-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow creation of reiser4 file systems on Linux 3.x (#742511)
    
    With reiser4progs 1.0.7 and earlier mkfs specifically checks for Linux
    kernel 2.5 or 2.6.  On Linux 3.x it fails with the following warning:
    
        # mkfs.reiser4 --yes --label "" /dev/sdb1
        Warn : Linux 3.13.0-39-generic is detected. Reiser4 does not support
        such a platform. Use -f to force over.
        # echo $?
        8
    
    This is fixed in reiser4progs 1.0.8 and later.  From the reiser4progs
    SourceForce README.txt:
    
        . Do not ask for confirmation to work under Linux-3.X;
    
    Found on Ubuntu 12.04 LTS and Ubuntu 14.04 LTS both with reiser4progs
    1.0.7 and a Linux 3.x kernel.
    
    Fix by adding "--force" flag to the mkfs command line.
    
    Bug 742511 - Creation of reiser4 file systems fails with unsupported
                 warning

2015-01-03  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation

2014-12-27  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2014-12-26  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-12-26  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-12-21  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2014-11-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly capitalise GNOME in the Manual and man page (#739805)
    
    The GNOME Logo & Trademarks page
    (http://www.gnome.org/logo-and-trademarks/) says:
        * All the letters in "GNOME" should be capitalized.
    
    Also correctly capitalise the program name as GNOME Partition Editor in
    the Manual, and gparted.doap file (used in web git browser).
    
    Bug 739805 - GNOME is incorrectly capitalised on the website and else
                 where

2014-12-19  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2014-12-18  Richard Hughes <richard@hughsie.com>

    Add keywords to the desktop file

2014-12-14  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-12-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor resize() to make it even easier to understand (#741211)
    
    Split the resizing file system and resizing partition calls in
    GParted_Core::resize() into separate grow and shrink code paths.
    
    Note that this also changes the degenerative case of calling resize()
    when the partition isn't changing size, for non-swap partitions, from a
    file system check step to a successful no-op.  This doesn't matter as my
    testing never found resize() to be called when the partition isn't
    changing size.
    
    Also correct spelling of local variable success.
    
    Bug 741211 - Remove unnecessary duplicate actions when resizing a
                 partition

2014-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop recreating linux-swap twice when shrinking a partition (#741211)
    
    Shrinking swap partition operation performs these steps:
    
        Shrink /dev/sdb2 from 2.00 GiB to 1.00 GiB
        + calibrate /dev/sdb2
        + check file system on /dev/sdb2 for errors and (if possible) fix them
            checking is not available for this file system
        + shrink file system
          + create new linux-swap file system
            + mkswap -L "test-swap" -U "bd381eba-5df7-42e2-8e0e-411e9701c995" /dev/sdb2
        + shrink partition from 2.00 GiB to 1.00 GiB
          + create new linux-swap file system
            + mkswap -L "test-swap" -U "bd381eba-5df7-42e2-8e0e-411e9701c995" /dev/sdb2
    
    Resizing a linux-swap partition was partially special cased in
    GParted_Core::resize().  Make it fully special cased so that it just
    does the following steps.  No more skipped file system checks or extra
    resizing.
    
        1)  Resize partition,
        2)  Recreate linux-swap.
    
    This existing call chain recreates the linux-swap:
        GParted_Core::resize_filesystem()
            linux_swap::resize()
    
    A compound move and resize operation still performs unnecessary checks
    and recreates of linux-swap, but less than before.
    
    Bug 741211 - Remove unnecessary duplicate actions when resizing a
                 partition

2014-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove second file system check when growing a partition (#741211)
    
    Shrinking a partition performs a single file system check step, but
    growing a partition still performs two file system checks.
    
        Grow /dev/sda8 from 1.00 GiB to 10.00 GiB
        + calibrate /dev/sda8
        + check file system on /dev/sda8 for errors and (if possible) fix them
        + grow partition from 1.00 GiB to 10.00 GiB
        + check file system on /dev/sda8 for errors and (if possible) fix them
        + grow file system to fill the partition
    
    This is a leftover from the early days of GParted when resizing a
    partition used cylinder buffering and performed three file system
    checks.  See prior to commit:
    
        d663c3c277f60da2ac1785c039f25f7920a315e9
        removed cylindersize buffering during resize from the filesystems.
    
    Remove the second file system check when growing a partition.
    
    Bug 741211 - Remove unnecessary duplicate actions when resizing a
                 partition

2014-11-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid splitting Autoconf check message for libparted version (#740004)
    
    First use of PKG_CHECK_EXISTS causes additional checking messages to be
    reported which splits the libparted version check message from it's
    result, like this:
    
        checking for libparted >= 1.7.1 (querying pkg-config)... checking for pkg-config... /usr/bin/pkg-config
        checking pkg-config is at least version 0.9.0... yes
        2.3
    
    Call PKG_CHECK_EXISTS early, before first use to avoid this.  Output
    now looks like:
    
        checking for pkg-config... /usr/bin/pkg-config
        checking pkg-config is at least version 0.9.0... yes
        :
        checking for libparted >= 1.7.1 (querying pkg-config)... 2.3
    
    Bug 740004 - use pkg-config to check for version of libparted

2014-11-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use pkg-config Autoconf check for libparted version first (#740004)
    
    Currently ./configure links and runs a program to query the libparted
    library version, which is used to determine the availability of some
    features.  This makes cross-compiling harder because the compile host
    has to fake a virtual installation target in which to run the check.
    Because of this, pkg-config based Autoconf checks are preferred.
    
    Switch to using a pkg-config based Autoconf check first to determine the
    version of libparted, falling back to the previous method for older
    distributions which don't provide a pkg-config file for libparted.
    
    Also small comment tidy-up elsewhere.
    
    Bug 740004 - use pkg-config to check for version of libparted

2014-11-03  Timo Jyrinki <timo@debian.org>

    Change Finnish translation team web page to l10n.gnome.org

2014-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rework population of the create new partition file system list
    
    Simplify how the list of file system types is populated in the Create
    New Partition dialog.  Change from copying everything and removing
    unwanted items to only copying required items.  Makes the code simpler
    and therefore easier to understand.

2014-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise ReFS file system (#738471)
    
    Only recognises ReFS file system.  No other actions are supported.
    Requires blkid from util-linux >= 2.24.
    
    Bug #738471 - ReFS file system is not recognised

2014-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use supported_filesystem() predicate (#738471)
    
    Use GParted_Core::supported_filesystem() to remove the need to
    explicitly list the growing number of recognised, but otherwise
    unsupported, file system signatures in multiple places.
    
    Bug #738471 - ReFS file system is not recognised

2014-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add supported_filesystem() predicate method (#738471)
    
    Helper to check whether a recognised file system type is supported by
    GParted or not.  Supported means there is an implementation class and
    will appear in the File System Support dialog.
    
    Make supported_filesystem() a static member function so that it can be
    called without a class object so that GParted_Core::GParted_Core()
    initialiser isn't called multiple times.  This requires FILESYSTEM_MAP
    to become a static member variable too.
    
    Bug #738471 - ReFS file system is not recognised

2014-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Comment and re-order FILESYSTEM enumeration type

2014-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass by value to get_filesystem_object()
    
    get_filesystem_object() takes a constant reference to a FILESYSTEM, but
    FILESYSTEM is just an enumeration.  So that's a pointer to a constant
    int.  Just pass by value instead.

2014-10-28  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2014-10-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Check for e4fsprogs commands for ext4 support on RHEL/CentOS 5.x (#738706)
    
    RHEL / CentOS 5.6 and later officially support ext4 file system [1].
    From RHEL / CentOS 5.3 ext4 file system was included as a technology
    preview.  Ext4 file system tools are in a separate package e4fsprogs,
    using uniquely named commands.  The standard e2fsprogs commands only
    support ext2 and ext3 file systems.
    
        # mkfs.ext4 /dev/sdb3
        # tune2fs -l /dev/sdb3
        tune2fs 1.39 (29-May-2006)
        tune2fs: Filesystem has unsupported feature(s) while trying to open /dev/sdb3
        Couldn't find valid filesystem superblock.
        # echo $?
        1
        # tune4fs -l /dev/sdb3
        tune4fs 1.41.12 (17-May-2010)
        Filesystem volume name:   <none>
        Last mounted on:          <not available>
        Filesystem UUID:          ba4a9d58-7728-4b47-8a90-80e772615637
        Filesystem magic number:  0xEF53
        Filesystem revision #:    1 (dynamic)
        Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
        ...
    
    For ext4 only, search for the e4fsprogs specific commands first and the
    standard e2fsprogs commands second.
    
    [1] RHEL 5.6 Release Notes, 5. Filesystems and Storage
    https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/5.6_Release_Notes/ar01s05.html
    
    Bug #738706 - GParted doesn't support ext4 on RHEL/CentOS 5.x

2014-10-20  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2014-10-20  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.20.0   ==========

2014-10-13  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2014-10-12  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2014-10-12  Duarte Loreto <happyguy_pt@hotmail.com>

    Updated Portuguese translation

2014-10-12  Tiago S <almosthumane@portugalmail.pt>

    Updated Portuguese translation

2014-10-12  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2014-10-10  Claude Paroz <claude@2xlibre.net>

    Updated French help translation

2014-10-10  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2014-08-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reduce flashing redraw from automatic partition selection (#696149)
    
    Automatic selection of the largest unallocated partition caused flashing
    redraw of the partition graphic and partition list.  Both the partition
    graphic and partition list were being drawn blank then redrawn fully
    populated.  This only happened on some distributions including:
    CentOS 5.10, 6.5, 7.0, Debian 6, Fedora 14, 20, Xubuntu 14.04 LTS.  Did
    not happen on: Kubuntu 12.04 LTS.
    
    This is a workaround, not a complete fix.  It moves automatic selection
    of the largest unallocated partition to after processing of the GTK
    Event loop in Refresh_Visual() which redraws the partition graphic and
    partition list.  These visuals are now drawn only once, fully populated,
    however this draws them without the selected partition.  The partition
    selection is then drawn afterwards which causes the selection to flash
    instead.  This is significant improvement to the whole partition graphic
    and partition list flashing when redrawn.
    
    Bug #696149 - Double refresh of display introduced with default
                  unallocated space

2014-08-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent flashing redraw of the devices combobox (#696149)
    
    The device combobox was getting drawn blank, then getting drawn again
    with the selected device.  This was happening because at the start of
    Win_GParted::refresh_combo_devices() the GTK model behind the combobox,
    liststore_devices, was cleared, changing the active item, causing the
    combobox to get redrawn empty.  After the GTK model had been repopulated
    the active item was reset causing the comboxbox to get redrawn again,
    now showing the selected device.  Call flow:
    
        Win_GParted::refresh_combo_devices()
            liststore_devices->clear()
                //Gtk::Combobox emits signal_change.  Registered callbacks
                //called.
                    Win_GParted::combo_devices_changed()
                        Win_GParted::Refresh_Visual()
                            ...
            ...
            combo_devices.set_active(current_device);
                //Gtk::Combobox emits signal_change.  Registered callbacks
                //called.
                    Win_GParted::combo_devices_changed()
                        Win_GParted::Refresh_Visual()
                            ...
    
    This has always been the case, since the device combobox was first added
    to GParted before version 0.1 by commit:
    
        3a4b43e0adb3974dea656fcbe90d5e191e0e9784
        replaced deprecated OptionMenu with ComboBox ...
    
    Fix by temporarily blocking the devices comboxbox from emitting
    signal_changed while the GTK model behind the combobox is recreated.
    
    However, since automatic selection of the largest free space was added
    [1] in GParted 0.15.0, a more noticeable flashing redraw issue was
    caused in which the partition graphic and partition list were both drawn
    blank then redrawn fully populated.  Some distributions were not
    affected by this at all, some only experienced a single flash and others
    suffered from two or more flashing redraws.  Some affected
    distributions: CentOS 5.10, 6.5, 7.0, Debian 6, Fedora 14, 19, 20,
    Ubuntu 13.10, Xubuntu 14.04 LTS.  Did not occur on Kubuntu 12.04 LTS.
    
    [1] 5b53c12f6ee12312a9bacb44b8b05b12a540d3d6
        Select largest unallocated partition by default (#667365)
    
    Bug #696149 - Double refresh of display introduced with default
                  unallocated space

2014-09-30  GNOME Translation Robot <gnome-sysadmin@gnome.org>

    Updated Scottish Gaelic translation

2014-09-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    README: Correct env variables to build using specific libparted version
    
    CPPFLAGS - Needed to instruct the compiler to use libparted include
    files, <parted/parted.h> etc, from the non-default location.
    
    LD_LIBRARY_PATH - Not needed to specify an additional directory to find
    libparted shared libraries at run time, as the linker build the
    additional directory into the executable based on the LD_RUN_PATH
    environment variable.

2014-09-14  Curtis Gedak <gedakc@gmail.com>

    Add section on building using a specific libparted version to README

2014-09-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Small update to source build instructions
    
    Make the standard three steps to build GParted more prominent by
    repeating them at the top of the Building from Source section in the
    README file.

2014-09-11  Balázs Úr <urbalazs@gmail.com>

    Updated Hungarian translation

2014-09-10  Dušan Kazik <prescott66@gmail.com>

    Updated Slovak translation

2014-09-09  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-09-05  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2014-09-01  Daniel Mustieles <dnaiel.mustieles@gmail.com>

    Updated Spanish translation

2014-08-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent automake warning about deprecated INCLUDES (#735742)
    
    Automake 1.13 and later generates the following warning when building
    GParted from git:
    
        $ ./autogen.sh
        ...
        checking for automake >= 1.9...
          testing automake-1.13... found 1.13.4
        ...
        Running automake-1.13...
        src/Makefile.am:1: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
        ...
    
    INCLUDES name has been depreciated since automake 1.7.  GParted's
    autogen.sh and configure.ac require at least automake 1.9.  Therefore
    replace automake variable INCLUDES with AM_CPPFLAGS.
    
    Bug #735742 - automake warns INCLUDES is deprecated

2014-08-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Tidyup Autoconf check for --disable-doc (#734076)
    
    Use AC_ARG_ENABLE() and AS_HELP_STRING() macros to improve handling of
    the --disable-doc option.
    
    Change the names, and sence, of the Autoconf and Automake definitions
    used to control building of the help documentation.  Reasons are:
    (1) Switch from negative to positive statements which are more natural
        to comprehend.
    (2) Insert HELP in the names from *_DOC to *_HELP_DOC as they control
        building of the documentation in the help subdirectory, not the
        manual page in the doc directory.
    
    Autoconf: HAVE_DISABLE_DOC -> ENABLE_HELP_DOC
    Automake: DISABLE_DOC      -> BUILD_HELP_DOC
    
    Bug #734076 - Autodetect parted online partition resizing capability

2014-08-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Tidy up Autoconf check for --enable-libparted-dmraid (#734076)
    
    Use AC_ARG_ENABLE() Autoconf macro to set enable_libparted_dmraid
    variable to either yes or no in all cases, whether set on the command
    line or not.  Use AS_HELP_STRING() macro to format the option help text.
    
    Bug #734076 - Autodetect parted online partition resizing capability

2014-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Automatically enable online resize with libparted >= 3.2 (#734076)
    
    Configure script checks for libparted version >= 3.2 to automatically
    determine the availability of online resize capability in libparted.
    This can be overridden from the ./configure command line.  Override
    enable when an older version of libparted has been patched to include
    online resize support with:
    
        ./configure --enable-online-resize
    
    Override disable with libparted 3.2 or later to disable the feature when
    it is not wanted with:
    
        ./configure --disable-online-resize
    
    Note that GParted also requires, and checks for at runtime, Linux
    kernel >= 3.6 for online resize support.  See commit for more details:
    
        de2844d02df02ad6ccf0f2caf7f63622cf4d25de
        Add online resize support (#694622)
    
    Bug #734076 - Autodetect parted online partition resizing capability

2014-08-31  Hannie Dumoleyn <hannie@ubuntu-nl.org>

    Updated Dutch translation Master

2014-08-23  Josef Andersson <josef.andersson@gmail.com>

    Updated Swedish translation

2014-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass link libraries via LIBS variable into Makefiles (#734718)
    
    Currently -lparted is passed to the linker by being hard coded in the
    gpartedbin_LDFLAGS variable in src/Makefile.am and -lparted-fs-resize
    by conditionally being appended to the gpartedbin_LDFLAGS.
    
    Add an Autoconf AC_CHECK_LIB check for the parted library using it's
    default action-if-found to extend LIBS.  Update the existing
    AC_CHECK_LIB check for the parted-fs-resize library so that the
    overridden action-if-found also extends LIBS with -lparted-fs-resize.
    These libraries are then assigned via the LIBS variable in the
    generated Makefiles.
    
    This matches how the other libraries, dl and uuid, were found in the
    configure script and passed to the Makefiles.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only check libparted version once and cache the result (#734718)
    
    Configure.ac still builds and runs very similar test executables twice
    to determine in the version of libparted is >= minimum require 1.7.1 and
    2.2 for improved partition re-read code.
    
    Build and run a single test to determine the version of libparted and
    cache the result.  Use this cached version number when testing the
    version of libparted.  Inspired by the version checking for intltool
    from /usr/share/aclocal/intltool.m4.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only check for ped_file_system_resize() once if possible (#734718)
    
    If ped_file_system_resize() function is found in the parted library
    don't bother to go on to check for it in the parted-fs-resize library.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename HAVE_LIBPARTED_2_2_0_PLUS define into feature names (#734718)
    
        Remove HAVE_LIBPARTED_2_2_0_PLUS definition
    
    Rename version specific #define HAVE_LIBPARTED_2_2_0_PLUS into two
    separate feature specific names set as required:
    
        Name                                  Set when?
    
        ENABLE_PT_REREAD_WORKAROUND           (libparted < 2.2)
        USE_LIBPARTED_LARGE_SECTOR_SUPPORT    (libparted >= 2.2)
    
    Using feature specific #defines is the standard Autoconf way and makes
    the resultant conditional code easier to understand.  Still have to
    check the version of libparted though.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use specific Autoconf check for FS resize capability in libparted (#734718)
    
        Replace Autoconf check for libparted >= 3.0
    
    Currently uses a custom check which compiles an executable to check for
    libparted version >= 3.0 to determine if the ped_file_system_resize()
    function exists in the parted library.
    
    Change to use a direct Autoconf check to determine the availability of
    the ped_file_system_resize() function in the parted library.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove little used HAVE_LIBPARTED_3_0_0_PLUS definition (#734718)
    
        Remove HAVE_LIBPARTED_3_0_0_PLUS definition
    
    The #define only controls whether fat16 and fat32 file systems are moved
    by libparted (for versions <= 2.4) or the GParted internal algorithm
    (for libparted versions >= 3.0).  See this commit for more details:
        0fda1d011d79c2e0e4d884e03947f2e4e8cec986
        Enable new fs resize library available with parted-3.1 (#668281)
    
    As nearly all other file system are moved using the GParted internal
    algorithm, just always use it to move fat16 and fat32 file systems too.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use Autoconf check specifically for libparted-fs-resize (#734718)
    
        Remove HAVE_LIBPARTED_3_1_0_PLUS definition and replace Autoconf
        check for libparted >= 3.1
    
    Currently uses custom check which compiles an executable to check for
    libparted version >= 3.1 to determine the availability of the library
    parted-fs-resize and the need to include the header <parted/filesys.h>.
    
    Change to use a direct Autoconf check to determine the availability of
    the ped_file_system_resize() function in the parted-fs-resize library.
    Remove inclusion of the header <parted/filesys.h> as it has always been
    included via <parted/parted.h>, at least as far back as parted 1.8.0,
    and even in parted 3.0 when ped_file_system_resize() and libparted file
    system resize capability didn't exist.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update AM_PROG_LIBTOOL to AC_PROG_LIBTOOL in configure.ac (#734718)
    
    AM_PROG_LIBTOOL is an old name and alias for AC_PROG_LIBTOOL.  Update.
    
    NOTE:
    In turn AC_PROG_LIBTOOL is an old name and alias for LT_INIT, but
    CentOS 5.x with libtool 1.5.22 doesn't have LT_INIT defined in
    /usr/share/aclocal/libtool.m4 serial 48, only AC_PROG_LIBTOOL and
    AM_PROG_LIBTOOL.  Therefore only update to AC_PROG_LIBTOOL and not
    LT_INIT while CentOS 5.x is supported.
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Removed unused variable need_work_around from configure.ac (#734718)
    
    Bug #734718 - Update Autoconf version specific libparted checks and
                  defines to feature specific ones

2014-08-16  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-08-12  Curtis Gedak <gedakc@gmail.com>

    Add GParted Live USB flash drive tip to help manual (#734376)
    
    Add tip that the GParted Live image can be written to a USB flash
    drive to be used in computers that can boot from USB.
    
    Bug 734376 - Add GRUB 2 Restore Steps to GParted Manual

2014-08-12  Curtis Gedak <gedakc@gmail.com>

    Improve wording of fixing OS boot problem section in help manual (#734376)
    
    Place more emphasis on the instructions to restore GRUB, and less on
    other boot loaders.
    
    Bug 734376 - Add GRUB 2 Restore Steps to GParted Manual

2014-08-12  Curtis Gedak <gedakc@gmail.com>

    Remove duplication in fixing GRUB boot section of help manual (#734376)
    
    Part of the list of actions that could cause a computer to fail to
    boot were duplicated.  Remove this duplication from the fixing GRUB
    boot problems section of the help manual.
    
    Bug #734376 - Add GRUB 2 Restore Steps to GParted Manual

2014-08-12  Curtis Gedak <gedakc@gmail.com>

    Add GRUB Legacy live media boot step to help manual (#734376)
    
    Bug #734376 - Add GRUB 2 Restore Steps to GParted Manual

2013-09-03  Curtis Gedak <gedakc@gmail.com>

    Add GRUB 2 restoration steps to help manual (#734376)
    
    Also add short description of GRUB 2 and GRUB Legacy, and list of
    GNU/Linux distributions and which version started using GRUB 2.
    
    Bug #734376 - Add GRUB 2 Restore Steps to GParted Manual

2014-08-07  Daniel Mustieles <dnaiel.mustieles@gmail.com>

    Updated Spanish translation

2014-07-30  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2014-07-30  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2014-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update parsing of btrfs filesystem show for multi-device membership (#733601)
    
    This patch changes the reading of the btrfs multi-device membership to
    resolve issue 1/2 by ignoring the exit status from the 'btrfs filesystem
    show' command and relying on parsing the required information to
    determine success or failure.
    
    Bug #733601 - Btrfs: Warnings and missing label with btrfs-progs 3.12
                  and 3.14

2014-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update parsing of btrfs filesystem show for file system usage (#733601)
    
    Patch 3/4 - btrfs::read_label()
    
    This patch changes the btrfs file system usage reading code to resolve
    issue 1/2 by ignoring the exit status from the 'btrfs filesystem show'
    command and relying on parsing the required information to determine
    success or failure.
    
    Bug #733601 - Btrfs: Warnings and missing label with btrfs-progs 3.12
                  and 3.14

2014-07-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update parsing of btrfs filesystem show for the label (#733601)
    
    Issue 2/2 - GParted doesn't show label for mounted btrfs file systems
    
    'btrfs filesystem show /dev/PTN' command is used to query details of a
    btrfs file system including reading the file system label.  When the
    file system is mounted the label is no longer enclosed in single quotes,
    but only when using btrfs-progs v3.12.  This causes GParted to think the
    label is blank when the file system is mounted and therefore no longer
    display it.
    
    File system label not enclosed in single quotes when mounted:
    
        # fgrep sdb1 /proc/mounts
        /dev/sdb1 /mnt/1 btrfs rw,relatime,space_cache 0 0
        # btrfs filesystem show /dev/sdb1
        Label: test1-btrfs  uuid: 1f78fa38-2f85-41d3-9be6-ae0356ae9469
                Total devices 1 FS bytes used 192.00KiB
                devid    1 size 2.00GiB used 240.75MiB path /dev/sdb1
    
        Btrfs v3.12
    
    File system label enclosed in single quotes when unmounted:
    
        # umount /dev/sdb1
        # btrfs filesystem show /dev/sdb1
        Label: 'test1-btrfs'  uuid: 1f78fa38-2f85-41d3-9be6-ae0356ae9469
                Total devices 1 FS bytes used 192.00KiB
                devid    1 size 2.00GiB used 240.75MiB path /dev/sdb1
    
        Btrfs v3.12
    
    Removing the single quotes enclosing the label makes the output
    identical to that from the older 'btrfs-show' command.
    
    Fix by using a common parser to extract the label from both the
    'btrfs filesystem show' and 'btrfs-show' commands which can read the
    label with and without enclosing single quotes.
    
    Patch 2/4 - btrfs::read_label()
    
    This patch changes the btrfs file system label parsing code to resolve
    issue 1/2 by ignoring the exit status from the 'btrfs filesystem show'
    command and relying on parsing the required information to determine
    success or failure.  Issue 2/2 is also resolved as described above.
    
    Bug #733601 - Btrfs: Warnings and missing label with btrfs-progs 3.12
                  and 3.14

2014-07-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update parsing of btrfs filesystem show for the UUID (#733601)
    
    Issue 1/2 - GParted shows warnings for mounted btrfs file systems
    
    'btrfs filesystem show /dev/PTN' command is used to query details of a
    btrfs file system.  When the file system is mounted the command reports
    failed exit status 1, but only when using btrfs-progs v3.14 and v3.14.1.
    This causes GParted to: (1) report warnings from the failed commands for
    a mounted btrfs file system, (2) fail to determine file system usage
    figures and (3) fail to display the mount point and busy indicator for
    non-mounting devices in multi-device btrfs file systems.  The label is
    also read using the secondary blkid method via the FS_Info cache.
    
    Failed exit status 1 when the btrfs file system is mounted:
    
        # fgrep sdb1 /proc/mounts
        /dev/sdb1 /mnt/1 btrfs rw,seclabel,relatime,space_cache 0 0
        # btrfs filesystem show /dev/sdb1
        Label: 'test1-btrfs'  uuid: 033e6b07-ee6a-4620-a585-8580a2b83275
                Total devices 1 FS bytes used 192.00KiB
                devid    1 size 2.00GiB used 240.75MiB path /dev/sdb1
    
        Btrfs v3.14.1
        # echo $?
        1
    
    Successful exit status 0 when the btrfs file system is unmounted:
    
        # umount /dev/sdb1
        # btrfs filesystem show /dev/sdb1
        Label: 'test1-btrfs'  uuid: 033e6b07-ee6a-4620-a585-8580a2b83275
                Total devices 1 FS bytes used 192.00KiB
                devid    1 size 2.00GiB used 240.75MiB path /dev/sdb1
    
        Btrfs v3.14.1
        # echo $?
        0
    
    Fix by ignoring the exit status of the 'btrfs filesystem show' command
    and rely on parsing the required information to determine success or
    failure.  The output from the older 'btrfs-show' command is almost
    identical so the same code will parse it in all cases.
    
    Patch 1/4 - btrfs::read_uuid()
    
    This patch changes the secondary method used to read the btrfs UUID to
    resolve issue 1/2 as described above.
    
    Bug #733601 - Btrfs: Warnings and missing label with btrfs-progs 3.12
                  and 3.14

2014-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Flush devices when scanning to prevent reading stale signatures (#723842)
    
    While one partition is busy, reformat another partition from the command
    line.  Afterwards parted/libparted still detects the original file
    system and GParted shows errors from the file system specific tools
    reporting the new file system doesn't exist.  Only limitation is that
    the new new file system must be recognised by libparted (or by GParted's
    fallback file system signature detection).
    
    Case #1, File system reformatting:
    
        # parted /dev/sdb print
        Model: ATA SAMSUNG SSD UM41 (scsi)
        Disk /dev/sdb: 8012MB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start   End     Size    Type     File system  Flags
         1      1049kB  2149MB  2147MB  primary  ext2
         2      2149MB  4296MB  2147MB  primary  ext2
        # mount | fgrep sdb
        /dev/sdb1 on /mnt/1 type ext2 (rw)
    
        # mkfs.xfs -f /dev/sdb2
        # blkid /dev/sdb2
        /dev/sdb2: UUID="c31823a2-b81b-46fa-8246-0a59695e4834" TYPE="xfs"
        # parted /dev/sdb print
        Model: ATA SAMSUNG SSD UM41 (scsi)
        Disk /dev/sdb: 8012MB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start   End     Size    Type     File system  Flags
         1      1049kB  2149MB  2147MB  primary  ext2
         2      2149MB  4296MB  2147MB  primary  ext2
        # e2label /dev/sdb2
        e2label: Bad magic number in super-block while trying to open /dev/sdb2
        Couldn't find valid filesystem superblock.
        # dumpe2fs /dev/sdb2
        dumpe2fs 1.41.12 (17-May-2010)
        dumpe2fs: Bad magic number in super-block while trying to open /dev/sdb2
        Couldn't find valid filesystem superblock.
    
    Case #2, Removing device from multi-device btrfs:
    
        # btrfs filesystem show /dev/sdb1
        Label: none  uuid: a05db434-efd5-4e8c-902f-05f89a88b610
                Total devices 2 FS bytes used 156.00KB
                devid    2 size 2.00GB used 512.00MB path /dev/sdb2
                devid    1 size 2.00GB used 240.75MB path /dev/sdb1
    
        # mount /dev/sdb1 /mnt/1
        # btrfs device delete /dev/sdb2
        # btrfs filesystem show /dev/sdb1
        Label: none  uuid: a05db434-efd5-4e8c-902f-05f89a88b610
                Total devices 1 FS bytes used 92.00KB
                devid    1 size 2.00GB used 714.25MB path /dev/sdb1
        # btrfs filesystem show /dev/sdb2
    
    and GParted reports this error for partition /dev/sdb2:
        Unable to read the contents of this file system!
        Because of this some operations may be unavailable.
        The cause might be a missing software package.
        The following list of software packages is required for btrfs
        file system support:  btrfs-tools.
    
    This is another case of libparted reading from the whole disk device
    (/dev/sdb) yet the file system tools use the partition specific block
    device (/dev/sdb2), and the Linux buffer cache not providing cache
    coherency.  Previous scenario was fixed with:
    
        797f0b8eeb61f81da1791c3cf048b5c0abf9a550
        Flush device after wiping a file system (#688882)
    
    This affects libparted 2.0 to 3.1 inclusive and is fixed by:
    
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=fb99ba5ebd0dc34204fc9f1014131d5d494805bc
        Revert "linux-commit: do not unnecessarily open partition device nodes"
    
    Fix by calling ped_device_sync() to guarantee cache coherency for each
    device during scanning.
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display btrfs members in the Partition Information dialog (#723842)
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fallback to reading mount command output instead of /etc/mtab (#723842)
    
    With linux 3.5 and later, the device used to mount a btrfs file system
    is updated in /proc/mounts when the previous mounting device is removed
    from the file system.  Most recent distributions make /etc/mtab a
    symbolic link to /proc/mounts.  However some still have /etc/mtab as a
    plain file only updated by mount and umount, thus showing the old device
    name which is no longer part of the file system.
    
    On Ubuntu 13.10, which has /etc/mtab as a plain file managed by mount
    and umount:
    
        # mkfs.btrfs /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # btrfs device add /dev/sdb2 /mnt/1
        # btrfs device delete /dev/sdb1 /mnt/1
        # sync
        # btrfs filesystem show /dev/sdb1
        # btrfs filesystem show /dev/sdb2
        Label: none  uuid: e47775a6-e5ad-4fb4-9ea4-1570aa5b4009
                Total devices 2 FS bytes used 28.00KB
                devid    2 size 2.00GB used 272.00MB path /dev/sdb2
    
        # fgrep btrfs /proc/mounts
        /dev/sdb2 /mnt/1 btrfs rw,relatime,space_cache 0 0
        # ls -l /etc/mtab
        -rw-r--r-- 1 root root 842 Apr 15 19:41 /etc/mtab
        # fgrep btrfs /etc/mtab
        /dev/sdb1 /mnt/1 btrfs rw 0 0
    
    This causes GParted to report /dev/sdb1 as busy and mounted at /mnt/1
    when it is no longer mounted.  This effects recent releases of Ubuntu,
    13.04, 13.10 and 14.04.
    
    Either /etc/mtab is a symlink and is identical to /proc/mounts or
    /etc/mtab is a plain file with wrong information.  Fix by not reading
    mounted file systems from /etc/mtab.
    
    However old distributions only contain 'rootfs' and '/dev/root' device
    names for the / (root) file system with '/dev/root' being a block device
    rather than a symlink to the true device.  For example from CentOS 5.x:
    
        # fgrep ' / ' /proc/mounts
        rootfs / rootfs rw 0 0
        /dev/root / ext3 rw,data=ordered 0 0
        # ls -l /dev/root
        brw------- 1 root root 8, 3 Jun  4  2013 /dev/root
    
    This prevents identification, and therefore busy detection, of the
    device containing the / (root) file system.  Used to read /etc/mtab to
    get the root file system device name.
    
        # fgrep ' / ' /etc/mtab
        /dev/sda3 / ext3 rw 0 0
        # ls -l /dev/sda3
        brw-r----- 1 root disk 8, 3 Jun  4  2013 /dev/sda3
    
    As per commit:
    
        409096f739118af95e3bff4484fdedb7885c97a2
        improved scanning for root mountpoint (/) ...
    
    but, as discussed above, this contains an out of date device name after
    the mounting device has been dynamically removed from a multi-device
    btrfs, thus identifying the wrong device as busy.  Instead fall back to
    reading mounted file systems from the output of the mount command, but
    only when required.
    
        # mount | fgrep ' / '
        /dev/sda3 on / type ext3 (rw)
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add fallback busy detection for btrfs file systems (#723842)
    
    In a number of cases there may be no btrfs device cache entry.  Some of
    the reasons why this can occur:
    1)  Mounting device removed from btrfs on linux <= 3.4 so old mount
        point in /proc/mounts;
    2)  btrfs and btrfs-show commands don't exist;
    3)  btrfs or btrfs-show command returned non-zero exit status;
    4)  get_cache_entry() failed to parse output from btrfs filesystem show
        or btrfs-show.
    
    Without a valid btrfs device cache entry, busy detection for all member
    devices fails.  Search the GParted internal mounted partitions map as
    the fallback busy detection method.  This can only determine if the
    mounting device is mounted or not, not any of the other members of a
    multi-device btrfs file system.
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-04-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass devid when resizing btrfs file systems (#723842)
    
    GParted doesn't specify the devid when resizing a btrfs file system, so
    the kernel defaults to resizing devid 1.  On a multi-device btrfs this
    may not be the same partition which GParted is resizing.  This will
    result in file system truncation and corruption.  Shrinking the wrong
    partition example:
    
        1)  Create a btrfs file system spanning 2 partitions:
                # mkfs.btrfs /dev/sdb1 /dev/sdb2
                # btrfs filesystem show /dev/sdb1
                Label: none  uuid: 41654265-9840-45c4-aca1-55989da358d6
                        Total devices 2 FS bytes used 112.00KiB
                        devid    1 size 2.00GiB used 437.50MiB path /dev/sdb1
                        devid    2 size 2.00GiB used 417.50MiB path /dev/sdb2
    
        2)  Resize /dev/sdb2 down to 1 GiB using GParted.  This command was
            run:
                btrfs filesystem resize 1048576K /tmp/gparted-ddyGRh
            which resized devid 1 (/dev/sdb1) to 1 GiB:
                # btrfs filesystem show /dev/sdb1
                Label: none  uuid: 41654265-9840-45c4-aca1-55989da358d6
                        Total devices 2 FS bytes used 256.00KiB
                        devid    1 size 1.00GiB used 437.50MiB path /dev/sdb1
                        devid    2 size 2.00GiB used 417.50MiB path /dev/sdb2
            but GParted instead resized /dev/sdb2 to 1 GiB:
                # sfdisk -s /dev/sdb1
                2097152
                # sfdisk -s /dev/sdb2
                1048576
    
    Even on a single device btrfs devid 1 may no longer exist if the file
    system has had the initial device removed from it.  Example:
    
        1)  Create a single btrfs file system, add a second device and
            remove the first:
                # mkfs.btrfs /dev/sdb1
                # mount /dev/sdb1 /mnt/1
                # btrfs device add /dev/sdb2 /mnt/1
                # btrfs device remove /dev/sdb1 /mnt/1
                # umount /mnt/1
                # btrfs filesystem show /dev/sdb2
                Label: none  uuid: 2cbf3ac3-1344-472a-a0c7-1476d23bdc9f
                        Total devices 1 FS bytes used 256.00KiB
                        devid    2 size 2.00GiB used 480.00MiB path /dev/sdb2
    
        2)  Again resize /dev/sdb2 down to 1 GiB using GParted.  This
            command was run:
                btrfs filesystem resize 1048576K /tmp/gparted-ddyGRh
            but it failed with:
                ERROR: unable to resize 'tmp/gparted-lEyGaY' - No such device
            A more informative error message was written to syslog:
                # tail -1 /var/log/messages
                Mar 12 14:15:01 localhost kernel: btrfs: resizer unable to find device 1
    
    This is with Linux kernel 3.13.5 on Fedora 20, circa March 2014.
    
    Fix by specifying the devid when resizing (part of) a btrfs file system.
    Example command specifying devid 2:
    
        btrfs filesystem resize 2:1048576K /tmp/1
    
    This will always work because it is the kernel which interprets the
    devid colon size parameter and has always done so since btrfs was first
    added to the kernel in version 2.6.32 [1].
    
    Reference:
    [1] linux v2.6.32 fs/btrfs/ioctl.c btrfs_ioctl_resize()
        https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/btrfs/ioctl.c?id=v2.6.32#n578
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add devid to the cache of btrfs device information (#723842)
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display usage for multi-device btrfs file systems (#723842)
    
    Currently GParted fails to report the usage of a multi-device btrfs file
    system if it is mounted or if the used space is larger than the size of
    an individual member device.  When GParted does display usage figures it
    also incorrectly reports the file system wide used figure against every
    member device.
    
    Mounted case:
        statvfs() provides an FS size which is larger than any individual
        device so is rejected.  See:
            GParted_Core::mounted_set_used_sectors()
                Utils::get_mounted_filesystem_usage()
                partition .set_sector_usage()
    
    Unmounted case, FS used > device size:
        FS used figure is larger than any individual device so free space is
        calculated as a negative number and rejected.  See:
            btrfs::set_used_sectors()
    
    Btrfs has a volume manager layer within the file system which allows it
    to provide multiple levels of data redundancy, RAID levels, and use
    multiple devices both of which can be changed while the file system is
    mounted.  To achieve this btrfs has to allocate space at two different
    level: (1) chunks of 256 MiB or more at the volume manager level; and
    (2) extents at the file data level.
    References:
    *   Btrfs: Working with multiple devices
        https://lwn.net/Articles/577961/
    *   Btrfs wiki: Glossary
        https://btrfs.wiki.kernel.org/index.php/Glossary
    
    This makes the question of how much disk space is being used in an
    individual device a complicated question to answer.  Further, the
    current btrfs tools don't provide the required information.
    
    Btrfs filesystem show only provides space usage information at the chunk
    level per device.  At the file extent level only a single figure for the
    whole file system is provided.  It also reports size of the data and
    metadata being stored, not the larger figure of the amount of space
    taken after redundancy is applied.  So it is impossible to answer the
    question of how much disk space is being used in an individual device.
    Example output:
    
        Label: none  uuid: 36eb51a2-2927-4c92-820f-b2f0b5cdae50
                Total devices 2 FS bytes used 156.00KB
                devid    2 size 2.00GB used 512.00MB path /dev/sdb2
                devid    1 size 2.00GB used 240.75MB path /dev/sdb1
    
    Fix by guesstimating the per device used figure as the fraction of the
    file system wide extent usage based on chunk usage per device.
    Calculation:
        ptn fs used = total fs used * devid used / sum devid used
    
    Positives:
    1) Per device used figure will correctly be between zero and allocated
       chunk size.
    
    Known inaccuracies:
    [for single and multi-device btrfs file systems]
    1) Btrfs filesystem show reports file system wide file extent usage
       without considering redundancy applied to that data.  (By default
       btrfs stores two copies of metadata and one copy of data).
    2) At minimum size when all data has been consolidated there will be a
       few partly filled chunks of 256 MiB or more for data and metadata of
       each storage profile (RAID level).
    [for multi-device btrfs file systems only]
    3) Data may be far from evenly distributed between the chunks on
       multiple devices.
    4) Extents can be and are relocated to other devices within the file
       system when shrinking a device.
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-03-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display mount points for multi-device btrfs file systems (#723842)
    
    Linux can only show a single device name in /proc/mounts and /etc/mtab
    for each mounted btrfs, even if it is a multi-device file system.  So
    GParted only shows a mount point for one of the devices in the btrfs, no
    matter how many devices are part of the file system.
    
        # mkfs.btrfs /dev/sdb1 /dev/sdb2
        # btrfs filesystem show /dev/sdb1
        Label: none  uuid: 36eb51a2-2927-4c92-820f-b2f0b5cdae50
                Total devices 2 FS bytes used 156.00KB
                devid    2 size 2.00GB used 512.00MB path /dev/sdb2
                devid    1 size 2.00GB used 240.75MB path /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # grep btrfs /proc/mounts
        /dev/sdb1 /mnt/1 btrfs rw,seclabel,relatime,ssd,space_cache 0 0
    
    GParted only shows the mount point for /dev/sdb1 as /mnt/1, but nothing
    for /dev/sdb2.
    
    Make GParted report the same mount point for all devices included in a
    multi-device btrfs file system.
    
    Add btrfs specific get_mount_device() method to report the mounting
    device, if any, for the btrfs file system in the occupying the device in
    question.  Uses the existing cache of btrfs file system device
    membership.  Also extract common code from GParted_Core::
    set_mountpoints() into set_mountpoints_helper().
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Detect busy status of multi-device btrfs file systems (#723842)
    
    Busy detection of file systems works by checking if the device is
    mounted (appears in the mount_info map).  For a multi-device btrfs file
    system this will only report one of the devices as busy, not all of
    them.
    
        # btrfs filesystem show /dev/sdb1
        Label: none  uuid: 36eb51a2-2927-4c92-820f-b2f0b5cdae50
                Total devices 2 FS bytes used 156.00KB
                devid    2 size 2.00GB used 512.00MB path /dev/sdb2
                devid    1 size 2.00GB used 240.75MB path /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # grep btrfs /proc/mounts
        /dev/sdb1 /mnt/1 btrfs rw,seclabel,relatime,ssd,space_cache 0 0
    
    GParted will only report /dev/sdb1 as busy, but not /dev/sdb2.
    
    Add btrfs specific is_busy() method which reports the device as busy if
    any of the devices in the btrfs file system are mounted.  This uses a
    cache which maps device membership in all btrfs file systems.  The cache
    is cleared on GParted refresh and incrementally populated as each btrfs
    partition is checked for busy status.
    
    WARNING:
    Removal of the mounting device from a btrfs file system makes it
    impossible to determine whether the file system is mounted or not for
    linux <= 3.4.  This is because /proc/mounts continues to show the old
    device which is no longer a member of the file system.
    
        # btrfs device delete /dev/sdb1 /mnt/1
        # sync
        # grep btrfs /proc/mounts
        /dev/sdb1 /mnt/1 btrfs rw,seclabel,relatime,ssd,space_cache 0 0
        # btrfs filesystem show /dev/sdb1
        # btrfs filesystem show /dev/sdb2
        Label: none  uuid: 36eb51a2-2927-4c92-820f-b2f0b5cdae50
                Total devices 1 FS bytes used 28.00KB
                devid    2 size 2.00GB used 1.02GB path /dev/sdb2
    
    Fixed in linux 3.5 by commit:
        Btrfs: implement ->show_devname
        https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9c5085c147989d48dfe74194b48affc23f376650
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add is_dev_mounted() to expose core partition is mounted test (#723842)
    
    Add static member function GParted_Core::is_dev_mounted() so that other
    modules can determine if a particular partition contains a mounted file
    system or not.
    
    Make it a static member function so that it can be called without
    needing the gparted_core object.  Extend to make the group of
    manipulated variables (mount_info, fstab_info) and manipulating
    functions (init_maps(), read_mountpoints_from_file(),
    read_mountpoints_from_file_swaps(), get_all_mountpoints()) static too.
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-03-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore busy detection of unknown mounted file systems (#723842)
    
    Previous commit:
        Make partition busy detection method selectable per file system
        (#723842)
    causes GParted to no longer detect an unknown mounted file system as
    busy.
    
    This is needed because there are many less popular file systems which
    Linux can mount but GParted doesn't recognise, such as: Acorn ADFS,
    AFFS, BeFS, BFS, etc.  Encountering an unrecognised mounted device can
    also occur with btrfs on Linux 3.4 and earlier when the mounting device
    is deleted from a multi-device btrfs file system.  Happens because
    /proc/mounts continues to show the original mounting device even after
    that device was deleted from the file system.
    
        # mkfs.btrfs /dev/sdb1
        # mount /dev/sdb1 /mnt/1
        # btrfs device add /dev/sdb2 /mnt/1
        # btrfs device delete /dev/sdb1 /mnt/1
        # btrfs filesystem sync /mnt/1
        # grep btrfs /proc/mounts
        /dev/sdb1 /mnt/1 btrfs rw,seclabel,relatime,ssd,space_cache 0 0
        # blkid /dev/sdb1
        # btrfs filesystem show /dev/sdb1
        # blkid /dev/sdb2
        /dev/sdb2: UUID="9c75647c-217a-4718-bcc7-f3ccd8cc7dc6" UUID_SUB="b5d43630-80d4-42ac-b406-185e97cd5bbe" TYPE="btrfs"
        # btrfs filesystem show /dev/sdb2
        Label: none  uuid: 9c75647c-217a-4718-bcc7-f3ccd8cc7dc6
                Total devices 1 FS bytes used 28.00KB
                devid    2 size 2.00GB used 1.02GB path /dev/sdb2
    
    Reinstate the search for mounted partitions for busy detection even for
    unrecognised file system types.
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-02-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make partition busy detection method selectable per file system (#723842)
    
    GParted's primary inbuilt busy detection method is "is the partition
    mounted?".  A custom method is used for LVM2 PV because its not a
    mounted file system.
    
    Make busy detection selectable per file system type.
    
        .fs.busy = FS::NONE  (default)
            No busy detection.
    
        .fs.busy = FS::GPARTED
            Use internal GParted method which checks if the partition is
            mounted.
    
        .fs.busy = FS:EXTERNAL
            Call the file system type's member function is_busy().
    
    LVM2 PV busy detection changes from a special case to just electing to
    call the lvm2_pv::is_busy() method.  Linux Software RAID remains a
    special case because it's only recognised, but not otherwise supported.
    
    Bug #723842 - GParted resizes the wrong filesystem (does not pass the
                  devid to btrfs filesystem resize)

2014-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make ./configure fail when C++ compiler is missing (#732803)
    
    Currently ./configure passes successfully even if a C++ compiler is not
    installed.  The first time building the code fails is when make tries
    to compile the first C++ source file and the compiler executable is not
    found.
    
    Also because there is no C++ compiler the autoconf generated test for
    Gtk::Window::set_default_icon_name() will always fail, leaving
    HAVE_SET_DEFAULT_ICON_NAME unset.  Therefore as well as installing a
    C++ compiler, ./configure must be run again to correctly test for
    set_default_icon_name().
    
    This is as a result of a little known consequence of having AC_PROG_CC
    proceed AC_PROG_CXX in the autoconf file configure.ac.
        Subject: AC_PROG_CXX behaviour when no C++ compiler is found
        http://lists.gnu.org/archive/html/bug-autoconf/2010-05/msg00001.html
    
    Reverse the order, placing AC_PROG_CXX before AC_PROG_CC, so that the
    generated ./configure script fails with an error if there is no C++
    compiler available.
    
    Bug #732803 - ./configure is successful even when C++ compile is missing

2014-07-15  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2014-07-15  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.19.1   ==========

2014-07-15  Wolfgang Stöggl <c72578@yahoo.de>

    Updated German translation

2014-07-14  Abderrahim Kitouni <a.kitouni@gmail.com>

    Updated Arabic translation

2014-07-14  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation

2014-07-13  Safa Alfulaij <safa1996alfulaij@gmail.com>

    Updated Arabic translation

2014-07-13  Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>

    Updated Romanian Translation

2014-07-11  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian translation

2014-07-10  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2014-07-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent cross thread write after free in _OnReadable() (#731752)
    
    Fragment of debugging and valgrind output:
    D: tid=2193 main()
    ...
    D: tid=2202 GParted_Core::set_devices_thread()
    ...
    D: tid=2202 Utils::execute_command(command="dumpe2fs -h /dev/sda1", output, error, use_C_locale=1)
    D: tid=2202 this=0x13fef4a0 PipeCapture::PipeCapture()
    D: tid=2202 this=0x13fef4f0 PipeCapture::PipeCapture()
    D: tid=2202 this=0x13fef4a0 PipeCapture::connect_signal()
    D:  sourceid=77
    D: tid=2202 this=0x13fef4f0 PipeCapture::connect_signal()
    D:  sourceid=78
    D: tid=2193 data=0x13fef4a0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4a0 PipeCapture::OnReadable()
    D:  signal_update.emit()
    D:  return true
    D: tid=2193 data=0x13fef4f0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4f0 PipeCapture::OnReadable()
    D:  signal_update.emit()
    D:  return true
    D: tid=2193 data=0x13fef4a0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4a0 PipeCapture::OnReadable()
    D:  signal_update.emit()
    D:  return true
    D: tid=2193 data=0x13fef4f0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4f0 PipeCapture::OnReadable()
    D:  signal_eof.emit()
    D:  return false
    D:  (!rc)  &(pc->sourceid)=0x13fef518
    D: tid=2193 data=0x13fef4a0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4a0 PipeCapture::OnReadable()
    D:  signal_update.emit()
    D:  return true
    D: tid=2193 data=0x13fef4a0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4a0 PipeCapture::OnReadable()
    D:  signal_update.emit()
    D:  return true
    D: tid=2193 data=0x13fef4a0 PipeCapture::_OnReadable()
    D: tid=2193 this=0x13fef4a0 PipeCapture::OnReadable()
    D:  signal_eof.emit()
    D: tid=2202 this=0x13fef4f0 PipeCapture::~PipeCapture()
    D:  sourceid=0
    D: tid=2202 this=0x13fef4a0 PipeCapture::~PipeCapture()
    D:  sourceid=77
    D:  return false
    D:  (!rc)  &(pc->sourceid)=0x13fef4c8
    ==2193== Thread 1:
    ==2193== Invalid write of size 4
    ==2193==    at 0x490580: GParted::PipeCapture::_OnReadable(_GIOChannel*, GIOCondition, void*) (PipeCapture.cc:56)
    ==2193==    by 0x38662492A5: g_main_context_dispatch (gmain.c:3066)
    ==2193==    by 0x3866249627: g_main_context_iterate.isra.24 (gmain.c:3713)
    ==2193==    by 0x3866249A39: g_main_loop_run (gmain.c:3907)
    ==2193==    by 0x3D7FD45C26: gtk_main (gtkmain.c:1257)
    ==2193==    by 0x469743: GParted::GParted_Core::set_devices(std::vector<GParted::Device, std::allocator<GParted::Device> >&) (GParted_Core.cc:155)
    ==2193==    by 0x4A78F1: GParted::Win_GParted::menu_gparted_refresh_devices() (Win_GParted.cc:1259)
    ==2193==    by 0x4A7886: GParted::Win_GParted::on_show() (Win_GParted.cc:1253)
    ==2193==    by 0x3D82B2009C: Gtk::Widget_Class::show_callback(_GtkWidget*) (widget.cc:3855)
    ==2193==    by 0x3867210297: g_closure_invoke (gclosure.c:777)
    ==2193==    by 0x3867221B86: signal_emit_unlocked_R (gsignal.c:3516)
    ==2193==    by 0x386722A0F1: g_signal_emit_valist (gsignal.c:3330)
    ==2193==  Address 0x13fef4c8 is not stack'd, malloc'd or (recently) free'd
    ==2193==
    
    PipeCapture.cc (with debugging):
        46  gboolean PipeCapture::_OnReadable( GIOChannel *source,
        47                                     GIOCondition condition,
        48                                     gpointer data )
        49  {
        50          std::cout << "D: tid=" << (long int)syscall(SYS_gettid) << " data=" << data << " PipeCapture::_OnReadable()" << std::endl;
        51          PipeCapture *pc = static_cast<PipeCapture *>(data);
        52          gboolean rc = pc->OnReadable( Glib::IOCondition(condition) );
        53          if (!rc)
        54          {
        55                  std::cout << "D:  (!rc)  &(pc->sourceid)=" << &(pc->sourceid) << std::endl;
        56                  pc->sourceid = 0;
        57          }
        58          return rc;
        59  }
    
    The use after free across threads only happens when an external program
    is being executed from a thread other than the main() thread.  This is
    because by default glib registered callbacks are run by the glib main
    loop, which is only called from the main() thread with Gtk::Main::run().
    
    Event sequence:
    tid=2193                      tid=2202
    
    main()
    ...
      GParted_Core::set_devices()
        Glib::Thread::create(... set_devices_thread ...)
        Gtk::Main::run()          GParted_Core::set_devices_thread()
                                  ...
                                    Utils::execute_command("dumpe2fs ... /dev/sda1" ...)
                                      Glib::spawn_async_with_pipes()
                                      PipeCapture outputcapture(out, output)
                                      outputcapture.connect_signal()
          //Glib main loop runs callback
          PipeCapture::_OnReadable()
            pc->OnReadable()
              //output read
              signal_update.emit()
              return true
          ...
          //Glib main loop runs callback
          PipeCapture::_OnReadable()
            pc->OnReadable()
              //eof reached
    [1]       signal_eof.emit()
                                      return status.exit_status
    [2]                               PipeCapture::~PipeCapture()
    [3]       return false
    [4]     pc->sourceid = 0
    
    What is happening is that the PipeCapture destructor [2] is running in
    the set_devices_thread() thread and freeing the object's memory as soon
    as signal_eof.emit() [1] has been called.  Then signal_eof.emit()
    returns back to OnReadable() which then returns false [3] back to the
    _OnReadable() callback function which then assigns 0 to sourceid member
    variable [4] in the already freed object, detected by valgrind as:
        Invalid write of size 4
           at ... GParted::PipeCapture::_OnReadable(...) (PipeCapture.cc:56)
    
    This is happening because PipeCapture member variable sourceid is being
    saved, in a different thread, just so the _OnReadable() callback can be
    removed.  However a glib IOChannel callback, type GIOFunc(), returning
    false will be automatically removed.
    
        GLib Reference Manual 2.26 / IO Channels
        https://developer.gnome.org/glib/2.26/glib-IO-Channels.html#GIOFunc
    
        GIOFunc()
    
        Returns : the function should return FALSE if the event source
                  should be removed
    
    Therefore fix by just not saving the event sourceid at all, and not
    calling g_source_remove() to manually remove the callback, but instead
    letting glib automatically remove the callback when it returns false.
    
    Bug #731752 - Write after free cross thread race in
                  PipeCapture::_OnReadable()

2014-06-18  MarMav <mavridou@gmail.com>

    Updated Greek translation

2014-06-12  Daniel Mustieles <dnaiel.mustieles@gmail.com>

    Updated Spanish translation

2014-06-10  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2014-06-10  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.19.0   ==========

2014-06-09  Alexandre Franke <alexandre.franke@gmail.com>

    Updated French translation

2014-06-04  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2014-06-03  Muhammet Kara <muhammetk@gmail.com>

    Updated Turkish translation

2014-05-19  GunChleoc <fios@foramnagaidhlig.net>

    Updated Scottish Gaelic translation

2014-04-01  Phillip Susi <psusi@ubuntu.com>

    Change OperationDetail to not store complex objects in STL containers (#729139)
    
    OperationDetail was storing its children in a std::vector.  This means they
    can be moved around in memory arbitrarily, going through indeterminate
    lifetimes.  This is generally a bad thing for any non trivial object and
    in the case of OperationDetail, it created havoc with the way it maintains
    pointers between parent/child objects for signal connections.  It will now
    keep only pointers to children in a std::vector instead, so their lifetime
    can be controlled, fixing various crashes.
    
    Bug 729139 - Refactor OperationDetail to address random behavior

2014-05-10  Phillip Susi <psusi@ubuntu.com>

    Prevent GSource double-destroy warning messages (#729800)
    
    Returning false from the OnReadable callback causes the source to
    be destroyed, but PipeCapture::~PipeCapture was destroying it a
    second time.  Prevent this by zeroing out the sourceid.
    
    Bug 729800 - Prevent GSource double-destroy warning messages

2014-05-18  Seong-ho Cho <shcho@gnome.org>

    Updated Korean translation

2014-05-14  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-05-01  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2014-04-30  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation

2014-04-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make LVM members selectable together in delete non-empty PV dialog
    
    Place the LVM2 member names in a single string, separated by new lines,
    so that they can be selected all together by the user.  This was not
    previously possible when each member name was placed in a separate
    widget.

2014-04-26  Curtis Gedak <gedakc@gmail.com>

    Set top vertical alignment for multi-line field and value label pairs
    
    A LVM volume group can contain more than one member and comprise a
    multi-line entry.  As such set the "Members" field header and value
    label pair to top vertical alignment.

2014-04-26  Curtis Gedak <gedakc@gmail.com>

    Add optional yalign argument to Utils::mk_label() method
    
    As part of the work on bug 652044 - uses deprecated APIs, selectable
    vertical alignment was defaulted to ALIGN_CENTER for all labels.  The
    relevant commits can be viewed in comment 26 of said bug report.
    https://bugzilla.gnome.org/show_bug.cgi?id=652044#c26
    
    For multi-line labels a vertical ALIGN_CENTER value is not
    consistently aesthetically pleasing.  This becomes obvious when a
    single-line heading label is paired with a multi-line value label.
    To improve the aesthetics, a vertical alignment of ALIGN_TOP is
    preferred.
    
    Hence re-add the ability to optionally specify a vertical alignment for
    labels.  If a yalign value is not specified a default vertical alignment
    of ALIGN_CENTER is used.

2014-04-26  Curtis Gedak <gedakc@gmail.com>

    Remove unused text_color argument from Utils::mk_label() method
    
    None of the current GParted code uses the text_color argument for
    Utils::mk_label().  Remove unused argument to simplify code.

2014-04-25  Curtis Gedak <gedakc@gmail.com>

    Remove partition information vgname from status field (#690542)
    
    With the volume group name displayed immediately below the status field,
    the vgname is no longer needed in the status field.
    
    Bug 690542 - Partition Information Dialog Warning not readable

2014-04-25  Curtis Gedak <gedakc@gmail.com>

    Center the data below the partition information graphic (#690542)
    
    When the partition information dialog is resized, the data below the
    partition graphic would remain left aligned.  Improve the aesthetics by
    horizontally centering the data in the window similar to the partition
    graphic.
    
    Bug 690542 - Partition Information Dialog Warning not readable

2014-04-24  Curtis Gedak <gedakc@gmail.com>

    Place partition information LVM2 member names in string list (#690542)
    
    Placing the LVM2 member names in a string list enables the member names
    to be selected all at once by a user.  This was not possible with
    separate label widgets for each LVM2 member name.
    
    Bug 690542 - Partition Information Dialog Warning not readable

2014-04-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove shadow border from partition information scrollable region (#690542)
    
    Bug 690542 - Partition Information Dialog Warning not readable

2014-04-14  Curtis Gedak <gedakc@gmail.com>

    Make the partition information dialog resizable (#690542)
    
    Make the dialog resizable, add a vertical scrollbar to the information
    and messages section, and set the initial height to ensure the dialog
    fits entirely on an 800x600 screen.
    
    A default height is required because some window managers, such as
    fluxbox used in GParted Live, only permit resizing the height by using
    the bottom corners of the dialog.  If the dialog is too large for the
    screen then the user would not be able to resize it.
    
    Note that two default initial heights are used in an effort to minimize
    the amount of extra whitespace.
    
    Bug 690542 - Partition Information Dialog Warning not readable

2014-04-13  Curtis Gedak <gedakc@gmail.com>

    Place partition information percentages in their own column (#690542)
    
    On some desktop environments, such as Unity on Ubuntu 13.04, the
    partition information dialog can display the used/unused/unallocated
    field values overlapping with the "(##%)" percentage value.  The problem
    is pronounced for values with 4 digits to the left of the decimal (for
    example a 1024 MiB partition ).  To address this problem, these
    percentages are placed in their own column.
    
    Bug 690542 - Partition Information Dialog Warning not readable

2014-03-30  Curtis Gedak <gedakc@gmail.com>

    Organize partition information into two field & value columns (#690542)
    
    Organize the partition information field & value areas into two columns
    to minimize the amount of vertical space required.
    
    This is part of a series of changes to enable viewing all partition
    information details on a minimum 800x600 display.
    
    Part of Bug 690542 - Partition Information Dialog Warning not readable

2014-03-30  Curtis Gedak <gedakc@gmail.com>

    Add partition information section titles and indent fields (#690542)
    
    This is part of a series of changes to enable viewing all partition
    information details on a minimum 800x600 display.
    
    Part of Bug 690542 - Partition Information Dialog Warning not readable

2014-03-29  Curtis Gedak <gedakc@gmail.com>

    Organize partition information fields into logical sections (#690542)
    
    This is part of a series of changes to enable viewing all partition
    information details on a minimum 800x600 display.
    
    Part of Bug 690542 - Partition Information Dialog Warning not readable

2014-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Initialise file system objects only once
    
    The code used to unnecessarily destroy and re-create the file system
    objects on every scan for file system support tools.
    
    Instead only create the file system objects once and just call each
    object's get_filesystem_support() method on each rescan.

2014-02-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove set_proper_filesystem() method
    
    Prior to commit:
    
        1f3b11748e99c0b56fed35a3fc77b2da5dc3072e
        Remove GParted_Core::p_filesystem (#683149)
    
    set_proper_filesystems() used to set GParted_Core::p_filesystem member
    variable to one of the FileSystem objects, but that was just treating it
    like a local variable.  After the commit local variables named
    p_filesystem were used where required and set_proper_filesystem() became
    a function which did nothing other than call get_filesystem_object().
    
    Now remove set_proper_filesystem() altogether and use
    get_filesystem_object() in its place.

2014-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused member variable GParted_Core::buf

2014-02-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove outdated comment about ped_partition_is_busy() for DMRaid devices
    
    Comment is outdated after GParted stopped using ped_partition_is_busy()
    for busy partition detection of normal and logical partitions since
    commit:
    
        420299206323fb49da5ba099b9f51cba95e58603
        Fix false busy detection of unusual case with Linux Software RAID (#712533)

2014-04-18  Jan Simon <jan.simon@gmx.de>

    Updated German translation

2014-04-15  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2014-04-15  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2014-04-08  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation

2014-04-04  Piotr Drąg <piotrdrag@gmail.com>

    doap: update URLs

2014-03-30  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2014-03-14  Joe Hansen <joedalton2@yahoo.dk>

    Updated Danish translation

2014-03-03  Curtis Gedak <gedakc@gmail.com>

    Avoid using String::ucompose to build command lines
    
    The String::ucompose method is for easy, i18n-friendly composition of
    strings with Gtkmm.  From past experience, String::ucompose should not
    be used to build command lines due to differences in how locales handle
    number translation.  More specifically, not all locales use number
    separators (spaces, commas or periods) and the decimal separator
    (period or comma) in the same way.
    
    The problem with using String::ucompose for command lines was
    originally encountered and corrected in the following commit:
    
    Fix attempt data rescue fail to open read-only view (#673246)
    e494eca1f7798d98cc4e83fb2875f1c409d0ac98

2014-01-05  Phillip Susi <psusi@ubuntu.com>

    Use e2image to move/copy ext[234] file systems (#721516)
    
    Use e2image features added in e2fsprogs 1.42.9 to move/copy
    an ext[234] file system more efficiently by skipping unused blocks.
    Fall back to the internal copy algorithm if e2image is not found
    or does not support move/copy.
    
    Bug #721516 - Use e2image to move/copy ext[234] filesystems

2014-03-03  GunChleoc <fios@foramnagaidhlig.net>

    Updated Scottish Gaelic translation

2014-02-19  Rūdolfs Mazurs <rudolfsm@src.gnome.org>

    Updated Latvian translation

2014-02-19  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2014-02-19  Curtis Gedak <gedakc@gmail.com>

    Update NEWS file with missed 0.18.0 release items
    
    Improve release news announcement and add missing BitLocker encrypted
    disk detection.

2014-02-19  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.18.0   ==========

2014-02-15  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2014-02-14  GunChleoc <fios@foramnagaidhlig.net>

    Updated Scottish Gaelic translation

2014-02-14  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-02-13  Claude Paroz <claude@2xlibre.net>

    Updated French manual translation

2014-02-12  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian translation

2014-02-10  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2014-02-08  GunChleoc <fios@foramnagaidhlig.net>

    Updated Scottish Gaelic translation

2014-02-06  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2014-02-06  Curtis Gedak <gedakc@gmail.com>

    Add gnome-common to fedora dependencies in README
    
    The gnome-common package is needed when building from the git
    repository.  This package was missed in the list of dependencies for
    the Fedora GNU/Linux distribution.

2014-02-06  Curtis Gedak <gedakc@gmail.com>

    Update help manual to match file system support dialog (#342682)
    
    The help manual was updated to reflect that the legend is now always
    displayed on the File System Support dialog.
    
    Bug #342682 - too much information in 'features' dialog

2014-02-07  Curtis Gedak <gedakc@gmail.com>

    Add empty Scottish Gaelic translation files for GParted help manual
    
    GunChleoc has brought to my attention an inability to create the
    Scottish Gaelic (gd) translation files for the GParted help
    manual using Damned Lies.  In an effort to work around this challenge
    I am adding "gd" to LINGUAS in help/Makefile.am, and also adding a
    template help/gd/gd.po file for translation.

2014-02-05  Phillip Susi <psusi@ubuntu.com>

    Remove incorrect rounding in file system resize (#723543)
    
    Work on bug 701075 inadvertently introduced a problem where ext2/3/4,
    resierfs, and ntfs file systems were rounding the file system size up
    to the nearest kiB.
    
    The problem was discovered when a user resized a partition by moving
    only the start boundary to the right thereby shrinking the partition.
    In the situation where the resulting partition size was not an integer
    kiB value (such as might occur on a 512 byte per sector device) the
    file system size was rounded up to the nearest kiB.  This resulted in
    a file system size being set one sector larger than the partition
    size.
    
    This problem was introduced with the following commit:
    
    Shrink file systems to exact size (#701075)
    3461413d283f1bac77e541b1054e775ec105212f
    
    The fix chosen for this problem involved removing the rounding logic.
    
    Bug 723543 - Shrink ext2/3/4 results in attempt to set partition
                 smaller than file system

2014-02-05  GunChleoc <fios@foramnagaidhlig.net>

    Updated Scottish Gaelic translation

2014-02-03  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2014-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise BitLocker encrypted partitions (#723232)
    
    Only recognises partitions containing BitLocker Disk Encryption content.
    No other actions are supported.
    
    Bug #723232 - BitLocker Disk Encryption not recognised

2014-01-31  Daniel Mustieles <daniel.mustieles@gmail.com>

    Revert "Fixed FSF's address. Fixes #721565"
    
    This reverts commit 9f5d683644d698fa7f8c034ceaadb9baeaeaed07.

2014-01-23  Daniel Mustieles <daniel.mustieles@gmail.com>

    Fixed FSF's address. Fixes #721565

2014-01-28  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2013-03-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore compilation order of source files
    
    Restore the order of the source files so that they are once again
    compiled in order A-Z, a-z.  Order is obtained with:
    
        fgrep .cc src/Makefile.am | LANG=C sort
        fgrep .h include/Makefile.am | LANG=C sort

2013-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make the File System Support dialog resizable (#342682)
    
    Make the dialog resizable, add a vertical scrollbar and set the minimum
    (and therefore initial) height to 500 pixels.  This is so that the
    dialog entirely fits on an 800x600 screen, thus allowing the rescan
    button to be pressed.
    
    100 pixel difference is to account for the size of the top and bottom
    GNOME 2 panels and two sets of title bars.  Two sets of title bars
    because the window manager tries to place the top of dialog title bars
    in line with the bottom of the main window title bar.
    
    Bug #342682 - too much information in 'features' dialog

2014-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Indent File System Support legend narrative (#342682)
    
    Use padding to indent the legend narrative to better show hierarchy and
    association with the "Legend" category as recommended in the:
    
        GNOME HIG 2.2.3 / Visual Design / Window Layout
        https://developer.gnome.org/hig-book/stable/design-window.html.en
    
    Padding the legend narrative widget also deliberately increases the
    spacing to the legend icons too.
    
    Bug #342682 - too much information in 'features' dialog

2013-09-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Always show the File System Support dialog legend (#342682)
    
    Make the legend always shown, ready for when the dialog is resizable.
    
    Change the widget containing the legend from an expander to a frame
    widget.  Set the frame to be borderless using a bold label as
    recommended in the GNOME Human Interface Guidelines 2.2.1 / Controls /
    Frames and Separators.
    
        https://developer.gnome.org/hig-book/2.32/controls-frames.html.en
    
    Bug #342682 - too much information in 'features' dialog

2014-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enhance readability of the DialogFeatures constructor
    
    The DialogFeatures::DialogFeatures() constructor used four levels of
    nested code blocks and reused the same variable names at multiple
    levels.  The variable hbox was used at three of the four levels.  This
    was done by commit:
    
        91b971691d912859cbeb3b916c27bb90c1fcceec
        Bug #634090: Change some attributes to local variables
    
    In my opinion this made the code hard to understand.  Give every local
    variable a unique and meaningful name and remove the nested code blocks.

2014-01-23  Daniel Mustieles <daniel.mustieles@gmail.com>

    Replace obsolete FSF postal address in copyright notices (#721565)
    
    This is part of parent bug:
        Bug #721455 - Obsolete info in license text on multiple modules
    
    and GNOME Goal:
        https://wiki.gnome.org/Initiatives/GnomeGoals/Proposals
    
        * verify all source files to make sure they have a license and a
          copyright, and that both are up-to-date
    
    Bug #721565 -  License text contains obsolete FSF postal address

2014-01-22  GunChleoc <fios@foramnagaidhlig.net>

    Added Scottish Gaelic translation

2014-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent crash when creating new partition on loop label (#721988)
    
    Write a loop partition table to a disk and then try to create a new
    partition on that disk crashes GParted.
    
    Analysis:
    
    1) Loop partition table, actually just the signature / label
       "GNU Parted Loopback 0", is written to the disk.
    2) create_partition() calls ped_disk_app_partition() to create the
       partition which, arguably erroneously, clears the loop signature.
    3) In erase_filesystem_signatures(), get_device_and_disk() fails because
       there's no longer a loop signature for libparted to recognise.  This
       leaves lp_device, lp_disk and lp_partition = NULL, but incorrectly
       overall_success = true.
    4) Overall_success = true allows the signature erasure loop to run and
       evaluate lp_device->sector_size, dereferencing a NULL pointer and
       crashing GParted.
    
    Fix erase_filesystem_signatures() to correctly handle failure from
    get_device_and_disk(), broken by this commit:
    
        246e05559d91865dd135690a62d56144f375c26b
        Clear btrfs file system super block mirror copies too (#705426)
    
    Bug #721988 - Crash when creating new partition on disk with loop label

2014-01-11  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2014-01-10  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2014-01-08  Dimitris Spingos <dmtrs32@gmail.com>

    Updated Greek translation of help

2014-01-06  Curtis Gedak <gedakc@gmail.com>

    Fix typo in package name for Fedora C++ compiler in README
    
    "gcc-g++" -> "gcc-c++"

2014-01-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update manual with default to GPT on disks >= 2 TiB (#711098)
    
    Bug #711098 - Default partition table can not handle > 2 TiB disks

2014-01-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display partition table types in order (#711098)
    
    In the Create Partition Table dialog display the entries in the combobox
    in order.
    
    Previously the default of MSDOS or GPT was moved to the first item in
    the combobox.  Now the partition table types remain in order with just
    either MSDOS or GPT being selected as as the default as required.
    
    The partition table types are displayed in the order supplied by
    libparted, which is alphabetic except with "loop" last.
    
    Bug #711098 - Default partition table can not handle > 2 TiB disks

2013-12-13  Phillip Susi <psusi@ubuntu.com>

    Default to GPT on disks >= 2 TiB (#711098)
    
    MSDOS partition table is limited to addressing 2^32 sectors, limiting
    disks using 512 byte sectors to 2 TiB in size.  Fdisk reports the
    following warning on disks 2 TiB and larger.
    
        # truncate -s 2T /var/tmp/loop-2T
        # losetup /dev/loop0 /var/tmp/loop-2T
        # fdisk /dev/loop0
    
        WARNING: The size of this disk is 2.2 TB (2199023255552 bytes).
        DOS partition table format can not be used on drives for volumes
        larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
        partition table format (GPT).
    
    (Fdisk arguably reports this warning one sector too early.  Anyway for
    safety and consistency GParted will use this limit too).  Continue to
    use MSDOS as the default partition table type for disks smaller than 2
    TiB and use GPT as the default for disks 2 TiB and larger.  This
    maximises compatibility.
    
    Also remove the advanced expander and always show the partition table
    list box.
    
    Bug #711098 - Default partition table can not handle > 2 TiB disks

2014-01-03  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2013-12-22  Seong-ho Cho <darkcircle.0426@gmail.com>

    Updated Korean translation

2013-12-18  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2013-12-12  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2013-12-09  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2013-12-09  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.17.0   ==========

2013-12-08  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2013-12-07  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-12-07  Muhammet Kara <muhammetk@gmail.com>

    [l10n]Updated Turkish translation

2013-12-05  Christian Kirbach <christian.kirbach@gmail.com>

    Updated German translation

2013-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Successfully read kernel versions with only 2 components
    
    When the kernel version as stated in /proc/version did not have at least
    three numbers separated by periods, the version would fail to be read.
    Sample /proc/version to demonstrate problem:
    
        Linux version 3.10-3-686-pae ...
    
    The Linux kernel will always have a major number and a minor number
    separated by a period.  There is likely also a patch version number too
    that would be preceded by a period.  This enhancement will read 2 and 3
    component Linux kernel versions.

2013-12-03  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2013-12-02  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-12-02  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation.

2013-12-01  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation of help files

2013-12-01  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2013-12-01  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation of help files

2013-11-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove multi-line comment compiler warning from PipeCapture.cc
    
    Remove this compiler warning:
        PipeCapture.cc:56:2: warning: multi-line comment [-Wcomment]
          //      /\                                          /\        /\
          ^
    
    added by commit:
        1b54123580aa668d3a2c391cce2d60c65a1668f9
        Enhance line discipline in PipeCapture::OnReadable() (#709276)

2013-11-27  Curtis Gedak <gedakc@gmail.com>

    Show SWRAID active/not active status in information dialog (#712533)
    
    Bug #712533 - Partitions not detected as busy inside Software RAID on
                  some distros

2013-11-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix detection of busy status of extended partitions (#712533)
    
    GParted doesn't report extended partitions as busy if it contains only
    busy LVM2 PV or SWRAID logical partitions.  Libparted's
    ped_partition_is_busy() only detects mounted file systems and swap space
    as busy, not active LVM2 PVs or SWRAID members.  This is as of libparted
    3.1 and earlier.
    
    Fix by determining the busy status of an extended partition based solely
    on the busy status of the logical partitions it contains.  This makes it
    unnecessary to check for mounted DMRAID logical partitions or call
    ped_partition_is_busy() for extended partitions.
    
    Bug #712533 - Partitions not detected as busy inside Software RAID on
                  some distros

2013-11-22  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix false busy detection of unusual case with Linux Software RAID (#712533)
    
    In this unusual setup of having one Linux Software RAID array
    partitioned and a second array not partitioned, /dev/md1p1 partition in
    the first array is falsely reported as busy when the file system filling
    the second array /dev/md2 is mounted.
    
      Partition   RAID                File System        Mount mount
      ---------   -----------------   ----------------   -----------
      /dev/sdb1   SWRAID /dev/md1
                         /dev/md1p1   ext4,Label=test1   (Unmounted)
      /dev/sdb2   SWRAID /dev/md2     ext4,Label=test2   /mnt/2
    
    This again affects Debian 6, Debian 7 and RHEL/CentOS 6.x and is as a
    result of the this bug fixed in libparted 2.4:
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=db52898c214310dab4ed84e6cb2f9ffc8c3aa502
        linux: also detect "in-use" dmraid and scsi-Nth (N>=16) partition
    
    Fix by not using libparted's ped_partition_is_busy() to determine if a
    normal or logical partition is busy.
    
    Bug #712533 - Partitions not detected as busy inside Software RAID on
                  some distros

2013-11-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix busy detection of file systems inside Linux Software RAID (#712533)
    
    On some distributions GParted doesn't detect when a file system is busy
    and mounted when the partition is within a Linux Software RAID array.
    Affected distributions include: Debian 6, Debian 7 and RHEL/CentOS 6.x.
    
    This is because of a bug in libparted 2.3 and earlier.  It was fixed by
    this change in libparted 2.4:
        http://git.savannah.gnu.org/cgit/parted.git/commit/?id=db52898c214310dab4ed84e6cb2f9ffc8c3aa502
        linux: also detect "in-use" dmraid and scsi-Nth (N>=16) partition
    
    Ubuntu 13.10 with libparted 2.3 is not affected because it contains a
    distribution specific patch to correct it.
    
    Fix by using GParted's internal mounted partitions map, mount_info, to
    determine if a partition is busy, in addition to using libparted's
    ped_partition_is_busy().
    
    Bug #712533 - Partitions not detected as busy inside Software RAID on
                  some distros

2013-11-25  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation

2013-11-25  Piotr Drąg <piotrdrag@gmail.com>

    Actually translate the AppData file

2013-10-01  Richard Hughes <richard@hughsie.com>

    Add an AppData file (#709164)
    
    For more information on AppData see:
    
    AppData Specification
    http://people.freedesktop.org/~hughsient/appdata/
    
    Application metadata with AppData
    http://lwn.net/Articles/569034/
    
    Bug #709164 - Please include an AppData file

2013-11-20  Curtis Gedak <gedakc@gmail.com>

    Update help manual for online resize support (#694622)
    
    Indicate that online resize is available for some mounted or otherwise
    active partitions.
    
    Bug #694622 - Add support for online resize

2013-11-15  Phillip Susi <psusi@ubuntu.com>

    Add online resize support (#694622)
    
    Many file systems are capable of growing while mounted, and a few can
    even shrink.  This support must be explicitly enabled at configure time
    with the --enable-online-resize flag and depends on a patched libparted.
    Also requires kernel >= 3.6 for partition resizing, even if the
    partition is in use (BLKPG_RESIZE_PARTITION).
    
    Thanks to Mike Fleetwood for double check mark idea instead of a second
    column to show the online grow/shrink.
    
    Bug #694622 - Add support for online resize

2013-10-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    List ext4 in the GParted Manual (#711114)
    
    Bug #711114 - Change default fs to ext4

2013-10-29  Phillip Susi <psusi@ubuntu.com>

    Change default file system to ext4 (#711114)
    
    In the Create New Partition dialog use ext4 as the default choice for
    new file systems.  It has been the preferred file system of
    distributions for many years.  Use ext3 and ext2 as second and third
    choice defaults.  This handles RHEL/CentOS 5.x which doesn't support
    ext4.
    
    Bug #711114 - Change default fs to ext4

2013-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Partition Information dialog warnings selectable (#705596)
    
    Allow all partition warning messages to be selectable and copied.  Merge
    all the messages into a single Gtk::Label widget so that they can be
    selected together.
    
    Use a blank line between individual messages so that each message can be
    distinguished. Therefore each message should be formatted as one or more
    non-blank lines, with an optional trailing new line.  This is true of
    GParted internal messages and probably all external messages and errors
    from libparted and executed commands too.
    
    Bug #705596 - Partition Information Dialog - let user copy warnings

2013-10-21  Anish A <aneesh.nl@gmail.com>

    Updated Malayalam Translation

2013-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused function declarations for *_mtoolsrc_file()
    
    Remove left behind function declarations create_mtoolsrc_file() and
    delete_mtoolsrc_file() after commit:
    
        2706f0174aeca1fdad08669c67fab5ac75ebfd5f
        Remove mtoolsrc file

2013-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent GParted starting stopped Linux Software RAID arrays (#709640)
    
    Applying operations or just scanning the partitions in GParted was
    causing all stopped Linux Software RAID arrays to be automatically
    started.  This is not new with this patch set, but as a result of the
    following behaviour which has existed for a long time.  Chain of events
    goes likes this:
    
     1) Gparted calls commit_to_os() to update the kernel with the new
        partition table;
     2) Libparted calls ioctl() BLKPG_DEL_PARTITION on every partition to
        delete every partition from the kernel.  Succeeds on non-busy
        partitions only;
     3) Kernel emits udev partition remove event on every removed partition;
     4) Libparted calls ioctl() BLKPG_ADD_PARTITION on every non-busy
        partition to re-add the partition to the kernel;
     5) Kernel emits udev partition add event on every added partition;
     6) Udev rule:
          SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="linux_raid_member", \
                  RUN+="/sbin/mdadm -I $tempnode"
        from either /lib/udef/rules.d/64-md-raid.rules or
        .../65-md-incremental.rules incrementally starts the member in a
        Linux Software RAID array.
    
    Fix by temporarily adding blank override rules files which does nothing,
    so that when the udev add and remove events for Linux Software RAID
    array member partitions fire nothing is done; but only when required.
    Note that really old versions of udev don't have rules to incrementally
    start array members and some distributions comment out such rules.
    
    Bug #709640 - Linux Swap Suspend and Software RAID partitions not
                  recognised

2013-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Detect busy status of Linux Software RAID members (#709640)
    
    Read the contents of /proc/mdstat file to determine if a device is a
    member of of an active RAID array.
    
        $ cat /proc/mdstat
        Personalities : [raid1]
        md1 : active raid1 sda1[2] sdb1[3]
              524224 blocks super 1.0 [2/2] [UU]
    
        md2 : active raid1 sdb2[2] sda2[3](F)
              5238720 blocks super 1.1 [2/1] [U_]
    
        md3 : active raid1 sdb3[1]
              10477440 blocks super 1.1 [2/1] [_U]
              bitmap: 1/1 pages [4KB], 65536KB chunk
    
        md4 : inactive sda4[0](S)
              1048564 blocks super 1.2
    
        unused devices: <none>
    
    There are 5 example Linux Software RAID arrays, md1 to md5.  All are
    RAID1 mirrors with 2 members, in various states.
    
        Array  Members     Status
        md1    sda1, sdb2  Fully operational.
        md2    sda2, sdb2  Member sda2 marked as faulty.  (Device sda2 is
                           still in use).
        md3    sda3, sdb3  Member sda3 has been removed.  (Device sda3 is
                           not in use).
        md4    sda4, sdb4  Incremental start of member sda4 only.  (Neither
                           member devices is in use).
        md5    sda5, sdb5  Array stopped.  (Neither member device is in
                           use).
    
    Also disable "Unmount" in the partition menu for active RAID array
    members.
    
    Bug #709640 - Linux Swap Suspend and Software RAID partitions not
                  recognised

2013-10-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise Linux Swap Suspend and Software RAID partitions (#709640)
    
    Recognise in kernel, Linux Swap Suspend partitions.  (When hibernated
    the kernel write the RAM out to swap space and changes the magic string
    from swap space to suspend).  Recognition required either
    libparted >= 1.8.8.1 or blkid from util-linux >= 2.15 or before that
    blkid from e2fsprogs >= 1.39.
    
    Recognise Linux Software RAID partitions.  Recognition requires blkid
    from util-linux >= 2.15.
    
    Example:
    
        # blkid /dev/sda10 /dev/sda11
        /dev/sda10: ... TYPE="swsuspend"
        /dev/sda11: ... TYPE="linux_raid_member"
    
        # parted /dev/sda print
        Model: ATA SAMSUNG HM500JI (scsi)
        Disk /dev/sda: 500GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start   End     Size    Type      File system     Flags
        ...
        10      361GB   362GB   1074MB  logical   swsusp
        11      362GB   363GB   1074MB  logical                   raid
    
    Bug #709640 - Linux Swap Suspend and Software RAID partitions not
                  recognised

2013-10-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using deprecated widget alignment enumerators (#652044)
    
    Step 3 of 3:
    
    Now that all label widgets are created with ALIGN_LEFT and ALIGN_CENTER
    alignment remove the x_align and y_align parameters from mk_label() and
    always use this alignment.  Also specify this alignment via floats
    rather than enumerators, one of which was deprecated.
    
    Bug #652044 - uses deprecated APIs

2013-10-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace widget alignment ALIGN_RIGHT with ALIGN_LEFT (#652044)
    
    Step 2 of 3:
    
    ALIGN_RIGHT was only used for the size figures in the GParted > Devices
    device selector with radio buttons.  Change to ALIGN_LEFT and adjust the
    widget packing to maintain appearance.
    
    Bug #652044 - uses deprecated APIs

2013-10-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace widget alignment ALIGN_TOP with ALIGN_CENTER (#652044)
    
    Gtkmm release 2.24 in February 2011 deprecated the use of these
    alignment enumerators superseding them with:
    
        Deprecated enumerator    Use instead
        Gtk::ALIGN_LEFT          Gtk::ALIGN_START
        Gtk::ALIGN_RIGHT         Gtk::ALIGN_END
        Gtk::ALIGN_TOP           Gtk::ALIGN_START
        Gtk::ALIGN_BOTTOM        Gtk::ALIGN_END
    
        gtkmm: gtkmm Enums and Flags [2.24]
        https://developer.gnome.org/gtkmm/2.24/group__gtkmmEnums.html
    
    The deprecated alignment enumerators were only used in the creation of
    Gtk::Label widgets by method Utils::mk_label().  In all but three cases
    the alignment was left, center.  So make all labels with alignment left,
    center and then stop using the deprecated enumerators.
    
    Step 1 of 3:
    
    ALIGN_TOP was only used for these 2 labels:
    
        "Path:" text in View > Device Information;
        "Path:" text in Partition > Information.
    
    Use of ALIGN_TOP makes no difference to these labels so just change to
    ALIGN_CENTER.
    
    Bug #652044 - uses deprecated APIs

2013-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using deprecated method free_colors() (#652044)
    
    Gtkmm releases 2.7.1 in July 2005 and 2.8 in September 2005 deprecated
    Gdk::Colormap::free_colors() and replaced it with
    Gdk::Colormap::free_color().  The oldest distribution currently
    supported is RHEL / CentOS 5.9 with gtkmm 2.10 so just unconditionally
    replace.
    
        ANNOUNCE: gtkmm 2.7.1
        https://mail.gnome.org/archives/gnome-announce-list/2005-July/msg00025.html
    
        ANNOUNCE: gtkmm and glibmm 2.8
        https://mail.gnome.org/archives/gnome-announce-list/2005-September/msg00026.html
    
    Bug #652044 - uses deprecated APIs

2013-10-01  Curtis Gedak <gedakc@gmail.com>

    Update install instructions for some GNU/Linux distributions

2013-10-05  Curtis Gedak <gedakc@gmail.com>

    Do not mask virtual file systems when using systemctl (#708378)
    
    This enhancement removes the virtual file systems from the list of file
    systems (shown below) to be masked.
    
    The following output was captured using Fedora 19:
    
    $ systemctl list-units --full --all -t mount
    UNIT                          LOAD   ACTIVE   SUB     DESCRIPTION
    -.mount                       loaded active   mounted /
    boot.mount                    loaded active   mounted /boot
    dev-hugepages.mount           loaded active   mounted Huge Pages File System
    dev-mqueue.mount              loaded active   mounted POSIX Message Queue File System
    proc-sys-fs-binfmt_misc.mount loaded inactive dead    Arbitrary Executable File Formats File System
    run-user-1000-gvfs.mount      loaded active   mounted /run/user/1000/gvfs
    sys-fs-fuse-connections.mount loaded active   mounted FUSE Control File System
    sys-kernel-config.mount       loaded active   mounted Configuration File System
    sys-kernel-debug.mount        loaded active   mounted Debug File System
    tmp.mount                     loaded active   mounted Temporary Directory
    
    LOAD   = Reflects whether the unit definition was properly loaded.
    ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
    SUB    = The low-level unit activation state, values depend on unit type.
    
    10 loaded units listed.
    To show all installed unit files use 'systemctl list-unit-files'.
    
    Bug #708378 - Advertised new feature: Use systemctl runtime mask to
                  prevent automounting (#701676) doesn't work

2013-10-01  Curtis Gedak <gedakc@gmail.com>

    Change systemctl to also mask /etc/fstab mount entries (#708378)
    
    A mistake was made in the following commit:
    
    Use systemctl runtime mask to prevent automounting (#701676)
    4c109df9b59e55699bd42023cf4007ee359793e9
    
    The intention was to use 'systemctl list-units' rather than
    'systemctl list-unit-files' so that auto-generated mount files would
    also be masked and hence prevented from auto-mounting.
    
    Now 'systemctl list-units' is used.
    
    Bug #708378 - Advertised new feature: Use systemctl runtime mask to
                  prevent automounting (#701676) doesn't work

2013-10-05  Rūdolfs Mazurs <rudolfsm@src.gnome.org>

    Updated Latvian translation

2013-10-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Turn on resize2fs text progress bar (#709276)
    
    Turn on the text progress bar for the resize2fs command.  Looks like:
    
        # resize2fs -p /dev/sda13 262144
        resize2fs 1.41.12 (17-May-2010)
        Resizing the filesystem on /dev/sda13 to 262144 (4k) blocks.
        Begin pass 2 (max = 97177)
        Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        Begin pass 3 (max = 80)
        Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        Begin pass 4 (max = 5597)
        Updating inode references     XXXXXXXXX-------------------------------
    
    Bug #709276 - Percentage indicator for subcommand

2013-10-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enhance line discipline in PipeCapture::OnReadable() (#709276)
    
    Add concept of cursor position within the current line, separate from
    the end of the buffer.  This is so that programs which output a text
    progress bar using backspace, such as resize2fs -p, are displayed
    correctly.
    
    Bug #709276 - Percentage indicator for subcommand

2013-09-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow GParted to read the UUID from older btrfs-show command
    
    All the code was there in btrfs::read_uuid() to read the UUID from the
    btrfs-show command.  It just needed enabling.
    
    This is only relevant when: (1) the blkid command is unavailable as
    GParted primarily reads the UUID through the FS_Info cache using the
    blkid command, and (2) the btrfs command is unavailable and the btrfs
    module uses the older btrfs-show command instead.

2013-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Actually display error message from statvfs() failure
    
    Pass error_message parameter by reference to
    get_mounted_filesystem_usage() so that the caller can access the
    modified error message when required.

2013-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add reporting of linux-swap usage (#708107)
    
    For active swap space read the usage from /proc/swaps.  (Linux kernel
    uses units of 1 KiB).  By definition inactive swap space is 100% free.
    
        $ cat /proc/swaps
        Filename                                Type            Size    Used    Priority
        /dev/sda2                               partition       5242876 430552  -1
    
    Always set fs.read = FS::EXTERNAL even if /proc/swaps doesn't exist so
    that an attempt is made to open the file generating a specific error, in
    addition to the generic error.
    
        open("/proc/swaps", O_RDONLY): No such file or directory
    
        Unable to read the contents of this file system!
        Because of this some operations may be unavailable.
    
        The cause might be a missing software package.
        The following list of software packages is required for linux-
        swap file system support: util-linux.
    
    Closes Bug #708107 - Usage of swap space is not reported

2013-09-19  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated Romanian Translation

2013-09-18  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2013-09-18  Curtis Gedak <gedakc@gmail.com>

    Minor cleanup of whitespace and format of NEWS file

2013-09-18  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.16.2   ==========

2013-09-17  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2013-09-17  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2013-09-15  Seong-ho Cho <darkcircle.0426@gmail.com>

    Updated Korean translation

2013-09-14  Ville-Pekka Vainio <vpvainio@iki.fi>

    Finnish translation update by Jiri Grönroos

2013-09-11  Joe Hansen <joedalton2@yahoo.dk>

    Updated Danish translation

2013-09-11  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2013-09-11  Daniel Korostil <ted.korostiled@gmail.com>

    Updated Ukrainian

2013-09-11  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-09-11  Claude Paroz <claude@2xlibre.net>

    Updated French manual translation

2013-09-11  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2013-09-10  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation for manual

2013-06-09  Curtis Gedak <gedakc@gmail.com>

    Add changes for Force Cancel button to help manual (#707070)
    
    A "Force Cancel" button and proper cancel support was added to
    GParted 0.15.0 with the following commit:
    
      Add proper cancel support (#601239)
      89de9a50269c2f92208a549f0e5feb6127ca7d30
    
    Part of Bug #707070 - Update Help Manual with GPT flags, Force Cancel
                          button, etc.

2013-06-05  Curtis Gedak <gedakc@gmail.com>

    Add list of gpt flags to help manual (#707070)
    
    Part of Bug #707070 - Update Help Manual with GPT flags, Force Cancel
                          button, etc.

2013-05-31  Curtis Gedak <gedakc@gmail.com>

    Add diag flag to help manual and update manual metadata (#707070)
    
    Part of Bug #707070 - Update Help Manual with GPT flags, Force Cancel
                          button, etc.

2013-09-10  Yuri Myasoedov <omerta13@yandex.ru>

    Fixed bug in Russian translation

2013-06-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable %age complete display from e2fsck command (#697662)
    
    Enable the text progress bar and percentage complete from the e2fsck
    command.  Looks like:
    
        # e2fsck -f -y -v -C 0 /dev/sda8
        e2fsck 1.41.12 (17-May-2010)
        Pass 1: Checking inodes, blocks, and sizes
        Pass 2: Checking directory structure
        test8: |=========================================               / 73.6%
    
    Note that e2fsck deliberately brackets the progress bar with control-A
    and control-B characters when it detects that it is not being run from a
    terminal so that logsave(8) can exclude the progress bar from being
    written to a log file.  As GParted doesn't run e2fsck via a pty it
    receives these control characters.  Ignore them.
    
    References:
    Change e2fsck to bracket its progress bar output with ctrl-A and ctrl-B
    http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/commit/?id=bc34d6be65cb93a65451ad209cfea2f98b03fd22
    
    Don't print ^A and ^B chars when e2fsck is talking directly to a tty
    http://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/commit/?id=54a31a3b2e432c124aa03442f2983c4f4d4a974c
    
    Closes Bug #697662 - Do not hide the progress of the tools used

2013-04-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow ntfsresize command to report real-time %age progress (#697662)
    
    Remove the -P, no progress bar option, from the ntfsresize command.
    This allows the command to display the %age complete on its output which
    is displayed in the operation details dialog, updated in real time.
    Possible since:
        Bug #685740 - Refactor to use asynchronous command execution
    
    Bug #697662 - Do not hide the progress of the tools used

2013-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also accept btrfs tools using IEC prefix multipliers (#706914)
    
    Currently the btrfs command outputs figures to 2 decimal places followed
    by an SI multiplier, e.g. 1.00GB.
    
    This patch to btrfs-progs has been included in the integration
    repository and will likely be included in the official btrfs-progs
    repository at some point.  It changes btrfs-progs to use IEC
    multipliers, e.g. 1.00GiB.  In fact multipliers already aren't used for
    figures less than 1024.
        [PATCH] btrfs-progs: use IEC units for size
        http://permalink.gmane.org/gmane.comp.file-systems.btrfs/26888
        https://patchwork.kernel.org/patch/2825841/
    
    Make GParted capable of also accepting IEC prefix multipliers, just "B"
    for bytes and no multiplier, as well as an optional space between the
    number and multiplier.  Therefore accept values like these:
        1.00GB         1.00 GB
        1.00GiB        1.00 GiB
        1073741824B    1073741824 B
        1073741824
    
    Closes Bug #706914 - Prepare for btrfs tools using IEC prefix
                         multipliers

2013-08-28  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2013-08-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear btrfs file system super block mirror copies too (#705426)
    
    With recent btrfs-progs, GParted failed to format a btrfs file system
    over the top of an existing one.  Make btrfs failed with this error:
    
        # mkfs.btrfs /dev/sdb1
        ...
        /dev/sdb1 appears to contain an existing filesystem (btrfs).
        Use the -f option to force overwrite.
    
    With this commit to btrfs-progs on 2013-02-19, mkfs.btrfs checks for
    existing file system signatures, including all mirror copies of btrfs
    super blocks, before writing to the partition.
    
        http://git.kernel.org/cgit/linux/kernel/git/mason/btrfs-progs.git/commit/?id=2a2d8e1962e8b6cda7b0a7584f6d2fb95d442cb6
        btrfs-progs: require mkfs -f force option to overwrite filesystem or partition table
    
    Make GParted clear all the mirror copies of the btrfs file system super
    blocks as erase_filesystem_signatures() is intended to prevent detection
    of old signatures.  This also avoids having to determine if the -f
    option to mkfs.btrfs is available before trying to use it.
    
    Closes Bug #705426 - Formatting Existing BTRFS Partition as BTRFS Fails
                         Because mkfs.btrfs Is Not Run with "-f"

2013-08-22  Curtis Gedak <gedakc@gmail.com>

    Fix regression - linux-swap resize broken (#706604)
    
    Unfortunately a regression was introduced with GParted 0.14.1 wherein
    linux-swap grow and shrink operations were broken.  This regression was
    a direct result of the following commit:
    
        Prevent file system grow when partition grow fails (#686668)
        fd963289201532f2216029ffd1e0b49e22d79560
    
    The regression did not result in an error in the GUI, but rather the
    linux-swap file system was not "resized" to the correct partition size.
    
    The logic error introduced with the above commit listed has now been
    fixed.
    
    BACKGROUND INFORMATION ON LINUX-SWAP RESIZING
    
    Currently no command line tools are available for resizing linux-swap.
    However, since linux-swap does not contain data in the usual sense, we
    simulate resizing linux-swap by re-creating (maximizing to fill
    partition) the linux-swap file system with the same UUID and volume
    label.  To work correctly, the linux-swap file system must be re-created
    after the final partition resize action has occurred.
    
    Closes Bug #706604 - Failure to properly grow or shrink linux-swap when
                         resizing

2013-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ensure running GParted is named correctly under GNOME Shell (#705323)
    
    Under GNOME Shell a running instance of GParted was getting named
    "Gpartedbin".  Ultimately GNOME Shell [1] uses the WM_CLASS X Window
    property [2], which GDK defaults from the executable name.
    
        $ xprop WM_NAME WM_CLASS
        (Click on running GParted window)
        WM_NAME(STRING) = "/dev/sda - GParted"
        WM_CLASS(STRING) = "gpartedbin", "Gpartedbin"
    
    Set the Class name, second string of the WM_CLASS X Window property, to
    "GParted".  (This prevents the use of the '--class' GTK+/GDK common
    command line option [3] to override the class name, but I expect nobody
    ever uses the option.  GNOME Terminal has the same limitation.  It also
    has the same change setting the Class name [4]).
    
    References:
    
    [1] Application Based GNOME 3
        https://wiki.gnome.org/GnomeShell/ApplicationBased
    
    [2] WM_CLASS Property, Inter-Client Communication Conventions Manual
        http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.2.5
    
    [3] Running GTK+ Applications, Common command line options
        https://developer.gnome.org/gtk3/stable/gtk-running.html
    
    [4] Bug #685742 - Window class of terminals doesn't match the desktop
        file name
        https://bugzilla.gnome.org/show_bug.cgi?id=685742
        https://git.gnome.org/browse/gnome-terminal/commit/?id=3370c0e51159f5be476b909e94ac05e5362dd28a
    
    Closes Bug #705323 - Shows up as 'Gpartedbin' in GNOME Shell

2013-08-10  Akom Chotiphantawanon <knight2000@gmail.com>

    Updated Thai translation.

2013-08-04  Seong-ho Cho <darkcircle.0426@gmail.com>

    Updated Korean translation

2013-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise new dosfstools program names (#704629)
    
    Dosfstools >= 3.0.18, released June 2013, renamed the programs thus:
    
        dosfslabel becomes fatlabel,
        dosfsck becomes fsck.fat,
        and mkdosfs becomes mkfs.fat.
    
    Dosfstools creates symbolic links for the old names for backward
    compatibility, but unfortunately the Debian dosfstools-3.0.22-1
    (experimental) package doesn't include those symbolic links.  This
    causes create, check and read unmounted FAT16/32 file systems to not be
    supported.
    
    Make GParted look for the new names first and the old names second.
    
    Closes Bug #704629 - Program name changes in dosfstools 3.0.18+ break
                         FAT16/32 support

2013-07-19  Dimitris Spingos <dmtrs32@gmail.com>

    Added Greek translation

2013-02-25  Curtis Gedak <gedakc@gmail.com>

    Ensure active tense of menu option in en_CA translation
    
    The menu option to mount a partition containing a file system should
    be the active tense because choosing the menu option will perform the
    action.
    
    Changing:
       "_Mounted on" --> "_Mount on"

2012-10-08  Curtis Gedak <gedakc@gmail.com>

    Add missing colon to label in en_CA translation
    
    "UUID" --> "UUID:"

2013-06-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using locate in autogen.sh (#702040)
    
    If the gnome-doc-utils package isn't installed and you try to compile
    GParted from git it will fail with this:
    
        $ ./autogen.sh
        /usr/bin/gnome-autogen.sh
        Cannot find file: gnome-doc-utils.make
        You need to install gnome-doc-utils
    
    After installing the gnome-doc-utils package the same error will be
    reported again unless you also update the locate database.
    
    Instead query the full path to the gnome-doc-utils.make file from the
    gnome-doc-utils' pkg-config metadata.
    
    Closes Bug #702040 - very strange gnome-doc-utils check in gparted

2013-06-11  Curtis Gedak <gedakc@gmail.com>

    Only permit one instance of GParted to execute at a time
    
    Only one partition editing tool should be in use at any one point
    in time.  If more than one is in use concurrently, then data loss
    might occur through operations on common partitions or partition
    tables.  As such, prevent multiple copies of GParted from running
    at the same time.

2013-06-09  Curtis Gedak <gedakc@gmail.com>

    Use systemctl runtime mask to prevent automounting (#701676)
    
    With the beta release of Fedora 19, invoking gparted appears to
    automatically mount partitions.  The systemd daemon appears to be
    performing the automounting.  Hence use systemctl runtime mask to
    prevent this automounting from occurring.
    
    Bug #701676 - gparted doesn't inhibit systemd mounting, leading to
                  potential data loss

2013-06-05  Sinlu Bes <e80f00@gmail.com>

    Add create_with_label flag to struct FS (#701569)
    
    It was difficult to retrieve whether a filesystem's label can be set on reformat.
    
    The read_label flag can't be used as it decides whether to use the logic in the filesystem class
    rather than the fallback in GParted::set_device_partitions, to determine the label of a partition.
    
    The create_with_label flag is NONE for file systems that we cannot format with a
    label (or that we cannot format at all).
    The value is usually EXTERNAL for file systems that we can format with a label.

2013-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused read-only functionality from internal block copy
    
    The read-only functionality is unused and the readonly parameter is
    always false in copy_filesystem() and copy_blocks() methods.  This has
    been the case since the copy simulation was dropped by commit:
    
        b9b4b2e55d1dadd5a5c0fef552dbbd2499561182
        Remove simulation pass ( read test ) on move

2013-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make include guards unique (#539297)
    
    Include guards need to be unique within GParted code and all included
    library header files.
        http://en.wikipedia.org/wiki/Include_guard#Difficulties
    
    Use this model for all include guards:
        #ifndef GPARTED_FILE_NAME_H
        #define GPARTED_FILE_NAME_H
        ...
        #endif /* GPARTED_FILE_NAME_H */
    
    Closes Bug #539297 - Make include guards unique

2013-05-30  Curtis Gedak <gedakc@gmail.com>

    Set NTFS minimum partition size to 2 MiB (#697848)
    
    The minimum NTFS volume size supported by the ntfs-3g mkntfs command
    is 1 MiB.  Since 1 extra sector is required for the backup NTFS boot
    sector, an NTFS partition must be at least 1 MiB plus 1 sector.
    
    To demonstrate, create a 1 MiB unformatted partition using MiB
    alignment (/dev/sdd1), and then try to format the partition as NTFS.
    
    # mkntfs -Q -v -L "ntfs-test" /dev/sdd1
    Device is too small (1023kiB).  Minimum NTFS volume size is 1MiB.
    
    For GParted this means a minimum NTFS partition size of 2 MiB since
    the smallest unit in the GUI is MiB.
    
    Bug #697848 - Failure to Create 1 MiB NTFS Partition

2013-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Place options before device name for the ntfsresize command
    
    Place the size and noaction options before the device name when resizing
    an NTFS file system to match the order documented in the manual page.
    Example fixed command:
    
        # ntfsresize -P --force --force -s 104857600 --no-action /dev/sda11

2013-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Shrink file systems to exact size (#701075)
    
    Ext[234] file systems were being shrunk 1 KiB too small.  Ntfs and
    reiserfs file systems were being shrunk 1 byte too small.  The resultant
    file systems were ending up 1 block smaller than they could have been.
    
    This looks like an accidental leftover from when GParted use to:
    1) Shrink the file system 1 cylinder too small
    2) Shrink the partition
    3) Grow the file system to fill the partition
    Relevant commit:
    
        d663c3c277f60da2ac1785c039f25f7920a315e9
        removed cylindersize buffering during resize from the filesystems
    
    Closes Bug #701075 - Setting the backup boot sector when resizing NTFS

2013-05-27  Curtis Gedak <gedakc@gmail.com>

    Add GPLv2+ license to gparted.in script source file
    
    Note the license text of this file differs slightly from the C++
    source code license text to indicate this file is a part of GParted.
    
    See:  https://www.gnu.org/licenses/gpl-howto.html
    
        For programs that are more than one file, it is better to replace
        “this program” with the name of the program, and begin the
        statement with a line saying “This file is part of NAME”.

2013-05-27  Curtis Gedak <gedakc@gmail.com>

    Remove GNOME SVN from message text
    
    GNOME is now managed under git revision control (not SVN).
    Also missing dependencies can be installed in many ways.

2013-05-27  Curtis Gedak <gedakc@gmail.com>

    Add GNU All-Permissive License to autogen.sh

2013-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update licensing statement in the README file
    
    Explicitly state that GParted is licensed under the GPLv2+ and the
    GParted Manual is licensed under the GFDLv1.2+.

2013-05-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add testbuild.sh script (#699881)
    
    For developers to build GParted in a git repository, logging the top
    commit and build results to testbuild.log.  Intended for use with
    git-test-sequence to verify every change of a patch set compiles, but
    can be used standalone too.
    
    Example usage:
        git-test-sequence origin/master.. testbuild.sh
    
    Further documentation can be found on the GParted web site at page:
        Git Source Code Management
        http://www.gparted.org/git.php
    
    Closes Bug #699881 - testbuild.sh - Builds GParted logging results

2013-05-25  Dušan Kazik <prescott66@gmail.com>

    Updated slovak translation

2013-05-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only allow Undo and Apply after merging operations (#699452)
    
    It was possible to make GParted crash by adding a label, check or new
    UUID operation and then applying the operation before the view of
    pending operations had finished fully opening.  The operation would be
    successfully applied but GParted would crash afterwards.
    
    The fault was that Add_Operation() still enabled the Undo and Apply
    buttons and processed the GTK event loop before merging the list of
    pending operations.  Faulty code flow went like this:
    
        activate_*()
            Add_Operation()
                Add operation to the operations[] vector
                Enable Undo and Apply buttons
                Refresh_Visual()
                    Process GTK event loop
                        Process Apply button callback applying operations,
                        refreshing display and clearing operations[] vector
            Merge operations in the operations[] vector
            << Core dump here >>
                Merge_Operations()
                    Refresh_Visual()
    
    This faulty code flow came about when merging of operations was added
    and it didn't appreciate that the operations[] vector could have been
    processed and cleared by Add_Operations() before the merge step.
    Relevant commit:
    
        b10349ae37df06b7bf7de91ea93a3913535ade3a
        Merge overlapping operations (#438573)
    
    Fragment of code in the label operation case:
    
      2454  void Win_GParted::activate_label_partition()
      2455  {
      ...
      2472          Add_Operation( operation ) ;
      2473
      2474          // Verify if the two operations can be merged
      2475          for ( unsigned int t = 0 ; t < operations .size() - 1 ; t++ )
      2476          {
      2477              if ( operations[ t ] ->type == OPERATION_LABEL_PARTITION )
      2478              {
      2479                  if ( Merge_Operations( t, operations .size() - 1 ) )
      2480                      break;
      2481              }
      2482          }
    
    Commentary in the crashing label operation case:
    
      2472  The pending operation was already applied when Add_Operation()
            returned resulting in the operations[] vector being cleared
            setting its size to 0.
      2475  The return type of operations.size() is an unsigned integral, so
            the upper limit of the for loop is t < 0UL - 1.  Assuming a
            32-bit machine that's t < 4294967295.
      2477  operations[] vector is access from out of bounds offset 0
            upwards until unallocated memory is accessed resulting in a core
            dump.
    
    Fix this by not enabling the Undo and Apply buttons and processing the
    GTK event loop until after merging of operations has been performed.
    Fixed code flow goes like this:
    
        activate_*()
            Add_Operation()
                Add operation to the operations[] vector
            Merge operations in the operations[] vector
                Merge_Operations()
            show_operationslist()
                Enable Undo and Apply buttons
                Refresh_Visual()
                    Process GTK event loop
                        Process Apply button callback applying operations,
                        refreshing display and clearing operations[] vector
    
    Not allowing the operations list to be process until after the merge
    step is the be correct ordering.  This also prevents the new operation
    from flashing up in the operations list and then immediately
    disappearing if merged.  In the case of adding the first operation,
    delaying enabling the Undo and Apply buttons is enough as the buttons
    were previously disabled preventing the operation being applied before
    the merge.  In the case of adding further operations, processing of the
    GTK event loop must also be delayed until after the merge to prevent the
    operations being applied before the merge.  Although that window of
    opportunity would only be microseconds.
    
    Bug #699452 - Crash when applying operations before pending operations
                  fully displayed

2013-05-17  Curtis Gedak <gedakc@gmail.com>

    Remove fat32.cc from POTFILES.in (#700228)
    
    As part of bug 700228, the fat16 and fat32 code was combined.  As a
    result, the fat32.cc file no longer exists and hence is not available
    for translation.

2013-05-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pad fat16/32 file system labels with spaces (#700228)
    
    Mlabel sometimes writes uninitialised memory at the end of the label.
    This causes mlabel, and therefore GParted, to display extra junk at the
    end of the label.  Depending on the bytes written GParted may also show
    the following error on stdout:
    
        (gpartedbin:18116): glibmm-CRITICAL **:
        unhandled exception (type Glib::Error) in signal handler:
        domain: g_convert_error
        code  : 1
        what  : Invalid byte sequence in conversion input
    
    This is caused by a bug in mlabel, believed fixed in mtools 4.0.14.
    Effects at least Fedora 14, RHEL/CentOS 6.x and Debian 6.  (Use label
    "1234567890" on Debian 6 to reproduce).  Reproduction steps:
    
        # mkdosfs -F16 /dev/sda7
        mkdosfs 3.0.9 (31 Jan 2010)
        # export MTOOLS_SKIP_CHECK=1
        # mlabel ::123456 -i /dev/sda7
        # mlabel -s :: -i /dev/sda7
         Volume label is 123456~1t
    
    It is not possible to detect which characters are junk so they can't be
    trimmed.  Instead just space pad labels so that at least newly written
    labels aren't effected.  (Fat labels are space padded on the disk by
    definition anyway).
    
    Bug #700228 - FAT16/32 labels are sometimes shown corrupted

2013-05-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Combine duplicate code for fat16/32
    
    There was virtually no difference between the separate modules for fat16
    and fat32.  Remove module fat32 and patch fat16 to serve both file
    system subtypes.  This is equivalent to what was previously done for
    ext[234] by commit:
    
        38dc55d49c062cb8e93c797f9bf166d3abc3456e
        Combine duplicate code for ext[234]

2013-05-17  Dimitris Spingos <dmtrs32@gmail.com>

    Updated Greek translation

2013-05-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename function relay_update
    
    Rename function to update_command_output() to better reflect that this
    callback updates the UI with the latest output read from the command
    being executed.
    
    This makes more sense knowing a future change will add a separate
    callback which parses the output read from the command and updates the
    progress bar.  This function should be named update_command_progress().

2013-05-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename signals update and eof
    
    Rename the libsigc++ signals to signal_update and signal_eof to match
    the naming used for signals in GParted.
        fgrep 'sigc::signal' include/*.h
    
    Also explicitly use the emit() method rather than using the object
    operator().  This again is to match the convention in GParted and make
    it more obvious what is happening.
        fgrep '.emit(' include/*.h

2013-04-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename class utils_execute_command_status
    
    Rename the class to CommandStatus to match the CamelCase naming used for
    classes in GParted.
        fgrep class include/*.h

2013-05-08  OKANO Takayoshi <kano@na.rim.or.jp>

    l10n: Update Japanese translation

2013-05-05  Curtis Gedak <gedakc@gmail.com>

    Add xdg-su to README (#699626)
    
    Add xdg-su to list of possible programs used to acquire root
    privileges in the gparted.desktop file.
    
    Bug #699626 - Enable gparted.desktop to prompt for root on default
                  openSUSE installation

2013-05-03  Curtis Gedak <gedakc@gmail.com>

    Add xdg-su program to gparted.desktop file (#699626)
    
    Add xdg-su to list of graphical switch-to-root programs to be
    considered for gparted.desktop file.
    
    The openSUSE GNU/Linux distribution includes the program xdg-su by
    default for graphically prompting for root privilege.
    
    This enhancement enables a user to compile and install gparted from
    source code on openSUSE and have the gparted menu entry graphically
    prompt for root privilege.
    
    Bug #699626 - Enable gparted.desktop to prompt for root on default
                  openSUSE installation

2013-04-30  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2013-04-30  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.16.1   ==========

2013-04-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix autoconf check for set_default_icon_name method (#695279)
    
    The autoconf check for the Gtk::Window::set_default_icon_name() method
    was failing to detect its availability, but only on Ubuntu >= 11.10.
    
    Turns out that the autoconf check incorrectly defined the link libraries
    via the C++ flags variable CXXFLAGS, rather than the LIBS variable.
    This resulted in the libraries being specified in the wrong order on the
    command line.  The test only failed when Ubuntu also added the
    "--as-needed" flag to the linker by default [1] which required the
    libraries to be correctly specified at the end of the command line.
    
    [1] Ubuntu 11.10 Release Notes, GCC 4.6 Toolchain
        https://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes#GCC_4.6_Toolchain
    
    This fixes commit:
    
        a04210788399736ff7f097cb75650ebcbd0a4950
        Only use Gtk::Window::set_default_icon_name method when available
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-04-25  Phillip Susi <psusi@ubuntu.com>

    Avoid glibmm GSource bug/crash (again) (#697727)
    
    The previous commit missed one glibmm GSource wrapper in the form of the
    io watch for the PipeCapture class.  Convert this one to use glib
    directly as well.
    
    Bug #697727 - Segfault in livecd Gparted v 0.15.0-3 when copying
                  partition

2013-04-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add copyright notice to PipeCapture .cc and .h files

2013-04-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only install fallback icon when required (#695279)
    
    Applications are moving away from storing icons in /usr/share/pixmaps,
    instead preferring /usr/share/icons/hicolor/$SIZE/apps, so only install
    the fallback icon when GParted requires it.
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-04-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add fallback method for specifying GParted icon (#695279)
    
    On RHEL / CentOS 5.9 GParted couldn't set an icon as the
    set_default_icon_name() method is not available.  See commit [1] for
    details.
    
    Re-add the old set_icon_from_file() method as a fallback and re-install
    a GParted pixmap as was used before commit [2].
    
    Commit [1]:
        a04210788399736ff7f097cb75650ebcbd0a4950
        Only use Gtk::Window::set_default_icon_name method when available
    
    Commit [2]:
        f5a80bc9048ffa859aab40de27d96a5dd1d7f65b
        Enabled GParted to use themed app icon (Tango theme)
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-04-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Work around failure to execute commands with old glibmm (#695279)
    
    On RHEL / CentOS 5.9 GParted failed to run any external commands and
    instead reported the following warnings to the terminal:
    
        # src/gpartedbin
        ======================
        libparted : 1.8.1
        ======================
        Failed to change to directory '' (No such file or directory)
        Failed to change to directory '' (No such file or directory)
        Failed to change to directory '' (No such file or directory)
        ...
    
    Utils::execute_command() and FileSystem::execute_command() passed a zero
    length string for the working directory to
    Glib::spawn_async_with_pipes() to mean don't change directory.  Instead
    glibmm just tried to change to the directory with a zero length name.
    This was fixed with glibmm >= 2.21.2 released July 2009, however RHEL /
    CentOS 5.9 only has glibmm 2.12.10.
    
    Relevant glibmm fix:
        Treat empty Glib::spawn*() working dir as unset
        https://git.gnome.org/browse/glibmm/commit/?id=8a7805cbbe6d268e975669349beb4e82d971537d
    
    Fix by simply specifying ".", the current working directory, as the
    directory to change into before executing all commands.
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Further RHEL / CentOS 5.9 compile fixes (#695279)
    
    Glib::ustring::compose() method requires glibmm >= 2.16, but RHEL /
    CentOS 5.9 only provides glibmm 2.12.  Replace with String::ucompose()
    as is used everywhere else in the code.
    
    Add missing include for kill() and SIGINT declarations.
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-04-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise HFSX variant as an HFS+ file system (#698876)
    
    Roughly HFSX is a case sensitive version of the HFS+ file system.
    
    Parted reports such a file system as "hfsx" rather than "hfs+".
    
        # mkfs.hfsplus -v "case insensitive hfs+" /dev/sda7
        Initialized /dev/sda7 as a 1024 MB HFS Plus volume
    
        # mkfs.hfsplus -s -v "case sensitive hfs+" /dev/sda8
        Initialized /dev/sda8 as a 1024 MB HFS Plus volume
    
        # parted /dev/sda print
        ...
        Number  Start   End     Size    Type      File system     Flags
        ...
         7      356GB   357GB   1074MB  logical   hfs+
         8      357GB   358GB   1074MB  logical   hfsx
    
        # blkid /dev/sda[78]
        /dev/sda7: LABEL="case insensitive hfs+" TYPE="hfsplus"
        /dev/sda8: LABEL="case sensitive hfs+" TYPE="hfsplus"
    
    Make GParted recognise HFSX file system variants too.
    
    Closes Bug #698876 - GParted fails to recognize HFS+ partition (possible
                         due to disabled journaling)

2013-04-24  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2013-04-24  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.16.0   ==========

2013-04-22  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated Romanian Translation

2013-04-20  Wolfgang Stöggl <c72578@yahoo.de>

    [l10n] Updated German documentation translation

2013-04-20  Wolfgang Stöggl <c72578@yahoo.de>

    [l10n] Updated German translation

2013-04-20  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2013-04-19  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation.

2013-04-18  Curtis Gedak <gedakc@gmail.com>

    Fix gparted scans forever blank disk in virtual machine (#697518)
    
    In some circumstances gparted would appear to scan forever if it
    encountered a blank hard disk.  This would happen if the timing of
    events was right and gparted encountered a disk without a partition
    table.  The missing partition table would cause a call to the
    exception handler, which could get stuck in a thread waiting position.
    
    The problem was traced back to the ped_exception_handler
    and a cond.signal() call missing the requisite mutex.lock() and
    mutex.unlock() around the signal call.
    
    Closes Bug #697518 - gparted scans forever blank disk in virtualbox

2013-04-19  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2013-04-18  Muhammet Kara <muhammetk@gmail.com>

    l10n: Update Turkish translation

2013-04-18  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2013-04-17  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translations

2013-04-16  Phillip Susi <psusi@ubuntu.com>

    Avoid glibmm GSource bug/crash (#697727)
    
    The glibmm GSource wrappers have a bug where they do not do
    reference counting properly, and have a race condition where
    the background thread can try to touch the source after the
    main thread has already processed and destroyed it.  This
    results in writes to freed memory and sometimes this causes
    crashes or other erratic behavior.  Avoid using the glibmm
    wrappers and use glib directly.  See bug #561885 for details
    of the glibmm bug.
    
    Bug #697727 - Segfault in livecd Gparted v 0.15.0-3 when copying partition

2013-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly report usage of absolutely full NTFS (#697946)
    
    For an absolutely full NTFS GParted doesn't show the file system usage
    but instead shows a warning against the partition.
    
    GParted was looking only for "resize at %d" to determine file system
    used figure in the output from the ntfsresize command.  Also handle
    finding "ERROR: Volume is full" too to derive used figure.
    
    NTFS with 1 block free case:
        # ntfsresize --info --force --no-progress-bar /dev/sda9
        ...
        Current volume size: 1073738240 bytes (1074 MB)
        ...
        Collecting resizing constraints ...
        You might resize at 1073737728 bytes (freeing 4096 bytes).
        ...
        # echo $?
        0
    
    Absolutely full NTFS case:
        # ntfsresize --info --force --no-progress-bar /dev/sda9
        ...
        Current volume size: 1073738240 bytes (1074 MB)
        ...
        Collecting resizing constraints ...
        ERROR: Volume is full. To shrink it, delete unused files.
        # echo $?
        1
    
    Closes Bug #697946 - Absolutely full NTFS reported as partition error

2013-04-12  Nicolás Satragno <nsatragno@gnome.org>

    Updated Spanish translation

2013-04-12  Nicolás Satragno <nsatragno@gnome.org>

    Updated Spanish translation

2013-04-09  Rafael Ferreira <rafael.f.f1@gmail.com>

    Updated Brazilian Portuguese translation

2013-04-02  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2013-04-01  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2013-04-01  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated romanian translation

2013-03-31  Carles Ferrando <carles.ferrando@gmail.com>

    [l10n] Updated Catalan (Valencian) translation

2013-03-31  Pau Iranzo <paugnu@gmail.com>

    [l10n] Update Catalan translation

2013-03-31  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2013-03-30  Martin Srebotnjak <miles@filmsi.net>

    Updated Slovenian translation

2013-03-29  Martin Srebotnjak <miles@filmsi.net>

    Updated Slovenian translation

2013-03-27  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-03-27  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-03-27  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-03-27  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-03-26  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-03-25  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2013-03-25  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2013-03-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unused function copy_filesystem_simulation()
    
    The function is no longer used after commit:
    
        b9b4b2e55d1dadd5a5c0fef552dbbd2499561182
        Remove simulation pass ( read test ) on move

2013-02-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't hard code reiser4 max label length when reading the label
    
    Lookup the maximum reiser4 file system label length instead, so that it
    is defined in only one place.  Small improvement missed from earlier
    commit:
    
        18941e24d3cb0b97a6d7cf52800f8f506f6a9ba8
        Avoid reading trailing junk for a reiser4 label (#689318)

2013-02-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor and rename GParted_Core::open/close_device_and_disk()
    
    These functions in GParted_Core:
        open_device()
        open_device_and_disk()
        close_disk()
        close_device_and_disk()
    call the following functions in the libparted API:
        ped_device_get()
        ped_disk_new()
        ped_disk_destroy()
        ped_device_destroy()
    which don't open or close anything.  Instead they allocate and
    deallocate PedDevice and PedDisk memory structures which describe block
    devices and partition tables respectively.
    
    Rename functions:
        open_device_and_disk()  -> get_device_and_disk()
        close_device_and_disk() -> destroy_device_and_disk()
    and merge open_device() and open_device() as each only wrapped one
    libparted function and was only called from a single place.

2013-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add "cleared" file system format details to the GParted Manual (#688882)
    
    Minimum update explaining the meaning of the cleared and unformatted
    file system types.
    
    Also markup file system names as GUI menu items.
    
    Bug #688882 - Improve clearing of file system signatures

2013-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove use of wipefs to clear file system signatures (#688882)
    
    The wipefs command has the following significant limitations which were
    worked around in previous commits:
    
    1)  Wasn't available in the earliest distributions supported by GParted;
    
    2)  Had to be called 3 times to erase vfat (fat16/32) signatures in all
        but the most recent versions.
    
    This meant we had all the code to clear file system signatures without
    using the wipefs command as well as extra complexity of using wipefs
    too.  So just remove use of the wipefs command.
    
    Bug #688882 - Improve clearing of file system signatures

2013-02-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear nilfs2 secondary super block (#688882)
    
    Wipefs only clears the nilfs2 file system signature from the primary
    super block at the start of the partition.  This is enough for blkid to
    no longer detect the file system.  However parted (>= 2.4 with nilfs2
    support) and therefore GParted still detect the file system using the
    secondary super block at the end of the partition.
    
        # mkfs.nilfs2 /dev/sda12
        # wipefs -a /dev/sda12
        2 bytes were erased at offset 0x00000406 (nilfs2): 34 34
        # blkid /dev/sda12
        # parted /dev/sda12 print
        Model: Unknown (unknown)
        Disk /dev/sda12: 1074MB
        Sector size (logical/physical): 512B/512B
        Partition Table: loop
        Disk Flags:
    
        Number  Start  End     Size    File system  Flags
         1      0.00B  1074MB  1074MB  nilfs2
    
    Overwrite the nilfs2 secondary super block at the end of the partition
    with 4K block of zeros.  Always do this just in case the partition
    contains a nilfs secondary super block but is detected as a different
    file system.  Such an example was documented in an earlier commit
    message.
    
    Bug #688882 - Improve clearing of file system signatures

2013-03-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make flush OS cache a reported step (#688882)
    
    As failure of flushing the cache can lead to misidentification of file
    systems make it a checked step in the displayed operation details.
    
    Bug #688882 - Improve clearing of file system signatures

2013-03-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display failure from wipefs as an error not a warning (#688882)
    
    When wipefs command fails this means that in the display of the
    operation results tree:
    
     1) The command is displayed with a time and a stop sign, rather than no
        time and a warning sign;
    
     2) There is no report of any warnings or failures at the top level
        summary.
    
    (The immedately following "clear primary signatures" step will clear all
    the file system signatures which wipefs failed to do.  Should this fail
    too it will report errors which will fail the whole operation).
    
    Bug #688882 - Improve clearing of file system signatures

2013-02-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement fallback if wipefs is not available or fails (#688882)
    
    RHEL/CentOS 5.x uses util-linux 2.13 which predates the wipefs command.
    Also the wipefs command may fail.  Therefore implement a fallback which
    caters for both these cases by overwriting all possible file system
    super blocks with zeros at the start of the partition.
    
    The "MUST be cleared" requirement stated in the first patch is now
    satisfied.  Therefore the status of the "clear old file system
    signatures" step, as returned by erase_filesystem_signatures(), now
    reflects the success of the wipefs command or the internal write zeros.
    Failure of both will stop all operations, matching what happens with all
    other steps.
    
    Bug #688882 - Improve clearing of file system signatures

2013-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Workaround not so old wipefs only erasing 1 of 3 vfat signatures (#688882)
    
    Before util-linux 2.21.0, released Feb 2012, wipefs only cleared one of
    the three vfat (fat16/fat32) signatures it can be detected by each time
    wipefs was run.  Also if a nilfs2 file system was created before all
    three signatures were cleared the partition was still recognised as a
    vfat file system, albeit a corrupted one, rather than as a nilfs2 file
    system.
    
    Old wipefs clearing vfat signatures:
        # wipefs --version
        wipefs from util-linux 2.20.1
        # wipefs -a /dev/sda7
        8 bytes were erased at offset 0x52 (vfat)
        they were: 46 41 54 33 32 20 20 20
        # wipefs -a /dev/sda7
        1 bytes were erased at offset 0x0 (vfat)
        they were: eb
        # wipefs -a /dev/sda7
        2 bytes were erased at offset 0x1fe (vfat)
        they were: 55 aa
    
    New wipefs clearing vfat signatures:
        # wipefs --version
        wipefs from util-linux 2.21.2
        # wipefs -a /dev/sda12
        8 bytes were erased at offset 0x00000052 (vfat): 46 41 54 33 32 20 20 20
        1 bytes were erased at offset 0x00000000 (vfat): eb
        2 bytes were erased at offset 0x000001fe (vfat): 55 aa
    
    Workaround by calling "wipefs -a" three times if the output indicated
    only one vfat signature was cleared.
    
    Bug #688882 - Improve clearing of file system signatures

2013-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Flush device after wiping a file system (#688882)
    
    When just formatting an existing partition to "cleared", GParted just
    uses wipefs to clear the file system signatures.  Afterwards parted/
    libparted still detect the file system and GParted shows errors from the
    file system specific tools reporting the file system doesn't exist.
    
        # wipefs /dev/sda7
        offset               type
        ----------------------------------------------------------------
        0x0                  xfs   [filesystem]
                             UUID:  28399a74-83a5-4ed7-aaf8-c76ac449fb57
        # wipefs -a /dev/sda7
        4 bytes were erased at offset 0x0 (xfs)
        they were: 58 46 53 42
        # parted /dev/sda print
        Model: ATA SAMSUNG HM500JI (scsi)
        Disk /dev/sda: 500GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos
    
        Number  Start   End     Size    Type      File system     Flags
         1      1049kB  538MB   537MB   primary   ext4            boot
         2      538MB   5907MB  5369MB  primary   linux-swap(v1)
         3      5907MB  32.8GB  26.8GB  primary   ext4
         4      32.8GB  500GB   467GB   extended
         5      32.8GB  355GB   322GB   logical   ext3
         6      355GB   356GB   1074MB  logical
         7      356GB   357GB   1074MB  logical   xfs
        # xfs_db -c 'sb 0' -c 'print blocksize' -c 'print dblocks' -c 'print fdblocks' -r /dev/sda7
        xfs_db: /dev/sda7 is not a valid XFS filesystem (unexpected SB magic number 0x00000000)
    
    Wipefs was run on the partition specific block device (/dev/sda7) where
    as libparted reads the disk using the whole disk device (/dev/sda).
    However as the Linux buffer cache does not provide cache coherency, the
    xfs file system can still be found in the cache of /dev/sda.
    
    Fix this by calling ped_device_sync() after wipefs as it guarantees
    cache coherency.
    
    (As documented in erase_filesystem_signatures() there are cases when
    calling ped_device_sync() isn't necessary, but testing shows that the
    whole processes takes at most 0.15 seconds.  As this is in the middle of
    applying an operation, uses won't notice this extra time so just always
    call ped_device_sync()).
    
    Bug #688882 - Improve clearing of file system signatures

2012-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add new "cleared" file system format (#688882)
    
    Add "cleared" to the bottom of list of file system formats available in
    the Create new Partition dialog and in the Format to --> (file system
    list) menu.  This clears existing file system signatures in the newly
    created partitions and existing partitions respectively.
    
    Bug #688882 - Improve clearing of file system signatures

2012-12-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor Win_GParted::create_format_menu() (#688882)
    
    Move some code into new create_format_menu_add_item() sub-function which
    adds one file system entry to the Partition --> Format to -->
    (file system list) menu.
    
    Bug #688882 - Improve clearing of file system signatures

2012-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use wipefs to clear old signatures before creating new file systems (#688882)
    
    Previously the function erase_filesystem_signatures() was used to clear
    file system signatures when a new partition was created and when an
    existing partition was formatted with a file system.  However this was
    only available with libparted <= 2.4 and then only for the file systems
    which libparted supports.
    
    Having multiple different file system signatures on a partition leads to
    misidentification of file system.  For example creating a nilfs2 over
    the top of a fat32 file system is detected as a fat32, not nilfs2.  This
    shows that old file system signatures must be cleared before a new file
    system is created.
    
    Fix by always using "wipefs -a /dev/PARTITION" command to clear all old
    file system signatures rather than libparted API calls.  Failure from
    wipefs is only considered a warning so doesn't fail the file system
    creation.  (This doesn't yet fully meet the "MUST be cleared"
    requirement above.  Will be fully met later in this patchset).  Output
    from the wipefs command is displayed as a new sub-step which looks like
    this:
    
        v Format /dev/sda7 as xfs                            00:00:05
          > calibrate /dev/sda14                             00:00:01
          v clear old file system signatures in /dev/sda7    00:00:01  [NEW]
            > wipefs -a /dev/sda7                                      [NEW]
          > set partition type on /dev/sda7                  00:00:02
          v create new xfs file system                       00:00:01
            > mkfs.xfs -f -L "" /dev/sda7
    
    Also signatures are only cleared immediately before a new file system is
    written and not when an unformatted partition is created.  This allows
    recovery from accidental partition deletion by re-creating the deleted
    partition as unformatted.
    
    Bug #688882 - Improve clearing of file system signatures

2013-03-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add autoconf checking messages for two checks
    
    Make the generated configure script additionally report these two checks
    with their outcome:
        checking for gtk_show_uri function... yes
        checking for Gtk::MessageDialog::get_message_area() method... yes

2013-03-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Modernise to a minimum of autoconf 2.50
    
    1)  Require autoconf >= 2.50
        (Released May 2001).
    
    2)  Rename file to configure.ac
        (Recommended with autoconf >= 2.50).
    
    3)  Update macro from AC_TRY_RUN to AC_RUN_IFELSE
        (As wanted by the autoupdate program).

2013-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only use Gtk::Window::set_default_icon_name method when available (#695279)
    
    GParted fails to compile on RHEL/CentOS 5.9 because it doesn't provide
    the Gtk::Window::set_default_icon_name() method.  The "gtkmm GTK::Window
    Class Reference" document says that set_default_icon_name() is available
    in gtkmm >= 2.6, however it is not available in RHEL/CentOS 5.9 with
    gtkmm 2.10.
    
    Add an autoconf compile and link check for the set_default_icon_name()
    method and make GParted only use the method when available.
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement fallback if Glib::Regex class is missing (#695279)
    
    GParted fails to compile on RHEL/CentOS 5.9 because it doesn't provide
    the Glib::Regex class.  Glib::Regex class requires glibmm >= 2.14,
    however RHEL/CentOS 5.9 only provides glibmm 2.12.
    
    Add an autoconf check for the Glib::Regex class and fallback code using
    the POSIX regex function.  Fall back code is the same as that used prior
    to commit:
        b6f1c56fb1e6119131a475ff6362f8cd59b1b33b
        Enhance regexp_label method to handle unicode characters
    
    Bug #695279 - GParted doesn't compile on RHEL / CentOS 5.9

2013-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update AUTHORS
    
    Provide credit for Patrick Verner

2013-03-16  Patrick Verner <exodusrobot@yahoo.com>

    Add f2fs file system support (#695396)
    
    Only supports detection and creation of f2fs file systems.  Requires
    f2fs-tools and a blkid with f2fs support, util-linux > 2.22.2.
    
    f2fs-tools v1.1.0 only supports file system creation.
    Currently requires util-linux directly from the git repository as f2fs
    support was only committed on 5 Feb 2013 and it has not yet been
    released.
    
    Closes Bug #695396 - Please apply f2fs patch

2013-03-19  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2013-03-19  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.15.0   ==========

2013-03-18  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2013-03-18  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated Romanian Translation

2013-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Select largest unallocated partition by default (#667365)
    
    After a refresh, instead of having no partition selected, default to the
    largest unallocated partition.  This allows immediate creation of a new
    partition in the unallocated space.
    
    Bug 667365 - Free space should be selected by default

2013-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Revert "Select unallocated partition by default (#667365)"
    
    This reverts commit 3dd769d955764455ade6ddee746a37657bff8f4a.
    
    It didn't consider unallocated partitions within extended partitions
    when looking for the largest one to select.

2013-03-17  Joe Hansen <joedalton2@yahoo.dk>

    Updated Danish translation

2013-03-17  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2013-03-17  António Lima <amrlima@gmail.com>

    Updated Portuguese translation and converted to New Spelling (Novo AO)

2013-03-16  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2013-03-15  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2013-03-14  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2013-03-12  Mario Blättermann <mario.blaettermann@gmail.com>

    [l10n] Updated German translation

2013-03-12  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2013-03-12  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2013-03-12  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2013-03-12  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2013-03-11  Curtis Gedak <gedakc@gmail.com>

    Mark string "Force Cancel" for translation

2013-03-11  Curtis Gedak <gedakc@gmail.com>

    Update translation file list in POTFILES.in

2013-03-11  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patch set by Phillip Susi

2013-01-30  Phillip Susi <psusi@ubuntu.com>

    Pass Partition instead of just its path to FileSystem::copy()
    
    Other operations get the Partition object and can look up the path or other
    attributes they need.  The copy method should be no different.

2013-01-30  Phillip Susi <psusi@ubuntu.com>

    Cleanup duplicate fs code
    
    Many filesystems do not implement some of their methods, but had to provide
    dummy implementations.  Remove all of the dummy implementations and instead
    just provide one in the base FileSystem class.

2013-01-30  Phillip Susi <psusi@ubuntu.com>

    Fix dialog progress details view size (#602635) (#662722)
    
    The details view refused to use additional space, even after the window was
    expanded, instead continuing to use the scrollbars.  Now resizing the
    window will be allowed regardless of the state of the details expander, and
    the details view will expand to use the extra space.  Also request enough
    initial width to not need a horizontal scrollbar.
    
    Closes:
    Bug 602635 - list of tasks in apply dialog does not expand to the available
                 vertical space
    
    Bug 662722 - Increase default width of "applying..." dialog to include the
                 "Details" status icons

2013-01-21  Phillip Susi <psusi@ubuntu.com>

    Combine duplicate code for ext[234]
    
    There were separate modules for ext3 and ext4 even though there
    were virtually no differences with ext2.  Remove the duplicate
    modules and patch ext2 to serve as a common reference for all
    three sub types.

2013-01-27  Phillip Susi <psusi@ubuntu.com>

    Clean up OperationDetail timer initialization
    
    The timer variables were not being properly initialized leading to bogus
    time values sometimes being displayed.

2013-01-26  Phillip Susi <psusi@ubuntu.com>

    Don't revert more than needed
    
    After a move is canceled or fails, an attempt is made to revert the disk to
    its previous state.  This was moving back all blocks that had already been
    copied.  Many of the first blocks copied during a move do not overwrite
    any valid data, and so do not need put back after an error, so don't bother
    doing so.

2013-01-26  Phillip Susi <psusi@ubuntu.com>

    Check fs after reverting partition table
    
    After a failed or canceled move, the move was reverted, and the filesystem
    was fscked while the partition was still in the expanded state encompassing
    the original and destination partitions, resulting in errors and
    corruption.  Move fsck to after the partition table has been restored to
    its original state.

2013-01-26  Phillip Susi <psusi@ubuntu.com>

    Remove simulation pass ( read test ) on move
    
    The simulation pass is unnecessary and just wastes more time when moving,
    so get rid of it.

2013-01-20  Phillip Susi <psusi@ubuntu.com>

    Bind ctrl-enter to apply-operations
    
    Bind the keyboard accelerator key ctrl-enter to apply operations.

2013-01-20  Phillip Susi <psusi@ubuntu.com>

    Select unallocated partition by default (#667365)
    
    After a refresh, instead of having no partition selected, default to the
    largest unallocated partition.  This allows immediate creation of a new
    partition in the unallocated space.
    
    Closes Bug 667365 - Free space should be selected by default

2013-01-20  Phillip Susi <psusi@ubuntu.com>

    Bind Insert key to new partition
    
    Add an accelerator key for Insert to trigger the new partition menu item.

2013-01-28  Phillip Susi <psusi@ubuntu.com>

    Flag mkfs and copy operations as safe to cancel (#601239)
    
    Closes Bug #601239 - Please allow 'Cancel after current operation'

2013-01-20  Phillip Susi <psusi@ubuntu.com>

    Add proper cancel support (#601239)
    
    Interested operations can now connect a signal to their OperationDetail
    to be notified of a cancelation request.  The internal copy/move code
    will now cleanly stop on cancelation, allowing the partition to be
    rolled back to its previous state.  This makes canceling a move
    perfectly safe.
    
    After clicking cancel, the button changes to "Force Cancel" and is
    disabled for 5 seconds.  Operations that are safe to cancel will do so
    and those that are not will continue to run.  Clicking force cancel
    asks operations to cancel, even if doing so is unsafe.  For the
    internal copy/move algorithm, canceling is always safe because an
    error results in a rollback operation.  Canceling the rollback is
    unsafe.  For external commands, filesystem modules may indicate
    that the command is safe to cancel or not.  Canceled commands will
    be terminated with SIGINT.
    
    As a result of the new safe cancel vs force cancel distinction, the
    scary warning about cancl causing corruption has been moved to
    after clicking the force cancel button.
    
    Part of Bug #601239 - Please allow 'Cancel after current operation'

2013-01-20  Phillip Susi <psusi@ubuntu.com>

    Thread the internal copy algorithm (#685740)
    
    Have the copy code create a background thread to do the actual copying so
    that it won't block the main loop.
    
    Part of Bug 685740 - Refactor to use asynchronous command execution

2013-02-21  Phillip Susi <psusi@ubuntu.com>

    Reduce threading (#685740)
    
    Win_Gparted and Dialog_Progress were creating threads to perform most
    functions in the background.  Most of the time, the only reason the
    threads blocked was to execute an external command.  The external command
    execution has been changed to spawn the command asynchronously and wait
    for completion with a nested main loop.  While waiting for completion,
    the pipe output is captured via events.  In the future, this will allow
    for it to be parsed in real time to obtain progress information.
    
    Those tasks in GParted_Core that still block now spawn a background thread
    and wait for it to complete with a nested main loop to avoid hanging the
    gui.
    
    Part of Bug #685740 - Refactor to use asynchronous command execution

2013-01-17  Phillip Susi <psusi@ubuntu.com>

    Remove mtoolsrc file
    
    fat16 and fat32 were creating a temp mtoolsrc file to configure the
    command to reference a drive letter and ignore certain errors.  They have
    been changed to pass this information via the command line and environment
    instead.

2012-01-24  Phillip Susi <psusi@ubuntu.com>

    Switch Dialog_Progress to use Glib thread instead of pthread (#601239)
    
    Dialog_Progress was using pthread_create() so that it could later
    pthread_cancel() the thread.  pthread_cancel() is wildly unsafe and full
    of errors.  Changed to use Glib's threads like the rest, and only cancel
    between operations.  Because it can take some time to cancel, disable
    the cancel button once it has been clicked once.
    
    Bug 601239 - Please allow 'Cancel after current operation'

2013-01-14  Phillip Susi <psusi@ubuntu.com>

    Use a full fledged nested main loop while waiting and pulsing progress bars (#685740)
    
    Win_Gparted and Dialog_Progress were looping on Gtk::Main::events_pending()
    and iteration() with usleeps in between.  Use a full mainloop instead and
    a proper timeout to trigger pulsebar updates instead of usleeps.
    
    Part of Bug 685740 - Refactor to use asynchronous command execution

2013-01-14  Phillip Susi <psusi@ubuntu.com>

    Remove gdk_threads_enter/exit (#685740)
    
    Use of these functions is depreciated and making gtk calls in a background
    thread still sometimes causes deadlocks or crashes.  Change ped exception
    handler to instead use an idle function to force the main thread to display
    the dialog box.
    
    Part of Bug 685740 - Refactor to use asynchronous command execution

2013-03-05  Dušan Kazik <prescott66@gmail.com>

    Updated slovak translation

2013-03-03  Curtis Gedak <gedakc@gmail.com>

    Fix move partition right to left shrinks partition 1 MiB (#695078)
    
    When moving a MiB aligned primary partition from right to left, the
    resulting partition was unexpectedly 1 MiB smaller in size.
    
    From further testing, this occurred only if the move boundaries
    overlapped the original partition boundaries.
    
    In cases where the move did not overlap the original partition
    boundaries, then the size remained the same.
    
    Closes Bug #695078 - Move of MiB aligned partition right to left
                         yields unexpected shrink of 1 MiB

2013-03-03  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2013-02-24  Curtis Gedak <gedakc@gmail.com>

    Add docbook style sheets to README to speed up build time
    
    The w3C has implemented measures to discourage excessive DTD traffic
    and to encourage caching the XML.  See,
    
    The W3C servers are slow to return DTDs. Is the delay intentional?
    http://www.w3.org/Help/Webmaster.html#slowdtd
    
    Caching XML data at install time
    http://www.w3.org/QA/2008/09/caching_xml_data_at_install_ti.html
    
    Many GNU/Linux distributions conveniently include these docbook
    style sheets in a package.  This package has been added to the
    dependencies for building from source.
    
    Also added and updated are commands related to installation on
    OpenSUSE.

2013-02-21  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2013-02-21  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patch by Jan Claeys

2013-02-16  Jan Claeys <devel@janc.be>

    Work around faulty "complete disks" detection in mkdosfs (#693955)
    
    Add -I option to 'mkdosfs' command to work around faulty detection of
    "complete disks" vs. "partitions".
    
    Bug #693955 - mkdosfs detects "complete disk" vs. "partition" incorrectly
    
    Thanks to Kano for reporting this!
    
    (This will also be needed if GParted ever allows formatting a device without
    partitioning it.)

2013-02-17  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2013-02-06  Muhammet Kara <muhammetk@acikkaynak.name.tr>

    [l10n] Updated Turkish translation

2013-01-22  Reinout van Schouwen <reinouts@gnome.org>

    Updated Dutch translation by Paulus Santané (laudaka)
    <laudaka@xs4all.nl>

2013-01-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent crash when using an unknown locale (#692049)
    
    When GParted is run with a locale the OS doesn't know it crashes.
    Reapply original fix.
    
        # LANG=xx_XX.UTF-8 ~mike/bin/gpartedbin
    
        (process:20385): Gtk-WARNING **: Locale not supported by C library.
                Using the fallback 'C' locale.
        ======================
        libparted : 3.1
        ======================
    
        (gpartedbin:20385): glibmm-ERROR **:
        unhandled exception (type std::exception) in signal handler:
        what: locale::facet::_S_create_c_locale name not valid
    
        Trace/breakpoint trap (core dumped)
    
    Original bug:
        Bug #157871 - gparted 0.0.6 segfaults on start
    First fix:
        commit a98126d69b176a35ca30bbdb469e84478d76f08d
        quick 'fix' for crashers in some locales (#157871) basicly the same +
    Accidentally reintroduced by:
        commit a739afc9a1d1d94a8c95446db762db93cff15572
        Update String::ucompose library to version 1.0.5
    
    Bug #692049 - Troubles with some locales

2013-01-12  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patch by Mathieu Dupuy

2012-12-14  Mathieu Dupuy <deronnax@gmail.com>

    Argument vector usage improvement (#689689)
    
    Minor change to filling user_devices vector.
    
    Closes Bug #689689 - argument vector filling improvement proposal

2013-01-02  Curtis Gedak <gedakc@gmail.com>

    Provide credit in About dialog for contributions
    
    Recognize contributions by Sinlu Bes.

2013-01-02  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patches by Sinlu Bes and Mike Fleetwood

2012-12-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant code trimming labels to length before use (#689318)
    
    No longer need to trim fat16, fat32 and xfs labels as all labels are
    limited to their maximum lengths during entry.
    
    Bug #689318 - filesystem type specific support for partition name
                  maximum length

2012-12-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid reading trailing junk for a reiser4 label (#689318)
    
    For a reiser4 file system with exactly the maximum size 16 character
    label, debugfs.reiser4 may include junk at the end of the label it
    prints.  (It reads the label into a 16 character array and prints it as
    a string, but there isn't a nul terminating character).
    
        # mkfs.reiser4 --yes --label abcdefghij123456 /dev/sda13
        # debugfs.reiser4 /dev/sda13 2> /dev/null | grep label:
        label:          abcdefghij123456!
    
    Trim the read label to at most 16 characters.
    
    Bug #689318 - filesystem type specific support for partition name
                  maximum length

2012-12-31  Pau Iranzo <paugnu@gmail.com>

    [l10n] Updated Catalan translation

2012-12-16  sinlu bes <e80f00@gmail.com>

    Make the partition label length dependent from the file system (#689318)
    
    fixes Bug #689318 - filesystem type specific support for partition name
                        maximum length

2012-12-28  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2012-12-14  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2012-12-12  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2012-12-12  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.14.1   ==========

2012-12-11  Dušan Kazik <prescott66@gmail.com>

    Updated slovak translation

2012-11-14  Curtis Gedak <gedakc@gmail.com>

    Remove SWRaid method as it is no longer needed (#678379)
    
    Active Linux software RAID devices are detected in the
    Proc_Partitions_Info method.  Hence the SWRaid method is no longer
    required.
    
    Removal of the SWRaid method fixes the problem with the error message:
    
      Could not stat device /dev/md/0 - No such file or directory
    
    This fixes the problem because we no longer use "mdadm --examine
    --scan" in an attempt to detect Linux software RAID devices.  The
    mdadm command was returning device names such as /dev/md/0, which are
    incorrect for GParted.
    
    NOTE:  With this change, GParted no longer requires the mdadm command
           to detect Linux software RAID devices.
    
    Closes Bug #678379 - Could not stat device /dev/md/0 - No such file or
                         directory

2012-11-14  Curtis Gedak <gedakc@gmail.com>

    Add regexp for Linux SW RAID devices in /proc/partitions (#678379)
    
    Add regular expression to detect the device entry only (e.g., md127)
    and not the partitions (e.g., md127p1).
    
    Linux software RAID devices are listed in /proc/partitions as follows:
    
    # cat /proc/partitions
    major minor  #blocks  name
       9   127     523968 md127
     259     0     131072 md127p1
     259     1     262144 md127p2
    
    Part of Bug #678379 - Could not stat device /dev/md/0 - No such file
                          or directory

2012-11-14  Curtis Gedak <gedakc@gmail.com>

    Tighten up regexp for HP Smart Array Devices
    
    HP Smart Array Devices are listed in /proc/partitions as follows:
    
    major minor  #blocks  name
     104     0  143338560 cciss/c0d0
     104     1     104391 cciss/c0d0p1
     104     2      24097 cciss/c0d0p2
     104     3  143203410 cciss/c0d0p3
    
    The previous regular expression was too broad, and would match many
    other forms, including Linux software RAID devices such as md127.
    
    Linux software RAID devices are listed in /proc/partitions as follows:
    
    major minor  #blocks  name
       9   127     523968 md127
     259     0     131072 md127p1
     259     1     262144 md127p2
    
    This problem with the regexp was discovered while investigating a
    problem with Linux software RAID device detection.
    
    The regular expression has been tightened up to match the following
    hardware RAID controllers:
    
      Compaq/HP Smartarray RAID controller
        E.g., device = /dev/cciss/c0d0, partition = /dev/cciss/c0d0p1
        (linux-x.y.z/Documentation/blockdev/cciss.txt)
    
      Compaq SMART2 Intelligent Disk Array controller
        E.g., device = /dev/ida/c0d0, partition = /dev/ida/c0d0p1
        (linux-x.y.z/Documentation/blockdev/cpqarray.txt)
    
      Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers
        E.g., device = /dev/rd/c0d0,  partition = /dev/rd/c0d0p1
        (linux-x.y.z/Documentation/blockdev/README.DAC960)
    
    Related to Bug #678379 - Could not stat device /dev/md/0 - No such
                             file or directory

2012-11-25  Curtis Gedak <gedakc@gmail.com>

    Fix logical partition grow overlaps extended partition end (#686668)
    
    In certain situations with a mixture of partition alignments, the MiB
    alignment option would try to set the end of a logical partition
    beyond the end of the extended partition.  This, of course, is an
    invalid partition geometry and the libparted library correctly reports
    failure when this is attempted.
    
    This enhancement to MiB alignment adds a check to see if the end of
    the logical partition would be beyond the extended partition, and
    adjusts the end of the logical partition if required.
    
    Closes Bug #686668 - Growing logical partition overlaps end of
                         extended partition

2012-11-25  Curtis Gedak <gedakc@gmail.com>

    Prevent file system grow when partition grow fails (#686668)
    
    Prior to this enhancement, GParted ignored the status of the partition
    grow operation, and attempted to grow the file system.
    
    Now we check the status of the partition grow operation prior to
    growing the file system.
    
    Part of Bug #686668 - Growing logical partition overlaps end of
                          extended partition

2012-11-30  Curtis Gedak <gedakc@gmail.com>

    Provide credit in About dialog for contributions
    
    Recognize contributions by Matthias Gehre.

2012-11-30  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patches by Matthias Gehre to clean up GParted Core
    global variables.

2012-11-30  Curtis Gedak <gedakc@gmail.com>

    Add *.mo to .gitignore file

2012-11-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Treat reiser4 label "<none>" as meaning blank (#688760)
    
    A reiser4 file system with a blank label is displayed as "<none>" by
    debugfs.reiser4 and therefore GParted too.
    
        # mkfs.reiser4 -y -L "" -f /dev/sda14
        # debugfs.reiser4 /dev/sda14 2> /dev/null | grep label:
        label:              <none>
    
    Additionally when displaying the Partition Information the following
    warning is written to the terminal:
    
        (gpartedbin:19609): Gtk-WARNING **: Failed to set text from markup
        due to error parsing markup: Error on line 1 char 23: Element
        'markup' was closed, but the currently open element is 'none'
    
    Fix by just assuming "<none>" always means blank.  If someone really
    does set the label to "<none>" it won't be displayed.  This is equlivant
    to how btrfs and nilfs2 are already handled.
    
    Closes bug 688760 - GParted displays blank resier4 label as <none>

2012-11-15  Dimitris Spingos <dmtrs32@gmail.com>

    Updated Greek translation

2012-11-06  Curtis Gedak <gedakc@gmail.com>

    Use gksudo, if available, in gparted.desktop
    
    If gksu was installed on a KDE system (tested with kubuntu 12.04 LTS),
    then gksu would prompt for the password three times and always fail to
    load gparted.  In a prior version of kubuntu 8.04 LTS, gksu would
    properly invoke gparted from the "K --> System --> GParted" menu
    entry.
    
    Since gksudo also works on KDE (and kubuntu 12.04 LTS), add gksudo to
    the root privilege invocation search list ahead of gksu.
    
    Note that gksu has been kept for backwards compatibility with systems
    that provide only gksu and not gksudo.
    
    Related to Bug #687813 - Use kdesudo on KDE, as gksu is not
                             installed by default

2012-11-06  Curtis Gedak <gedakc@gmail.com>

    Use kdesudo in gparted.desktop when gksu is not installed (#687813)
    
    Normally gksu is not installed by default on KDE systems.  When
    compiling and installing gparted on a KDE system without gksu, the
    desktop menu entry would try to run gparted as the user, and not with
    root privileges.
    
    To fix this, add kdesudo to the search list of root privilege
    invocation programs.
    
    Closes Bug #687813 - Use kdesudo on KDE, as gksu is not installed by
                         default

2012-10-30  Matthias Gehre <M.Gehre@gmx.de>

    Remove GParted_Core::p_filesystem (#683149)
    
    Bug #683149 - Cleanup(?): Remove lp_device and lp_disk from GParted_Core

2012-09-01  Matthias Gehre <M.Gehre@gmx.de>

    Remove GParted_Core::fs (#683149)
    
    Bug #683149 - Cleanup(?): Remove lp_device and lp_disk from GParted_Core

2012-09-01  Matthias Gehre <M.Gehre@gmx.de>

    Remove GParted_Core::partition_temp (#683149)
    
    Bug #683149 - Cleanup(?): Remove lp_device and lp_disk from GParted_Core

2012-09-01  Matthias Gehre <M.Gehre@gmx.de>

    Remove GParted_Core::temp (#683149)
    
    Bug #683149 - Cleanup(?): Remove lp_device and lp_disk from GParted_Core

2012-10-30  Matthias Gehre <M.Gehre@gmx.de>

    Remove lp_partition from GParted_Core (#683149)
    
    Bug #683149 - Cleanup(?): Remove lp_device and lp_disk from GParted_Core

2012-10-30  Matthias Gehre <M.Gehre@gmx.de>

    Remove unnecessary close_device_and_disk()
    
    1) lp_disk is not used and assigned NULL so doesn't need closing.
    2) lp_device is already ped_device_open()ed and ped_device_close()d
    within the above while loop.  lp_device will be set to NULL when the
    while loop ends so this doesn't need closing either.  Hence
    close_device_and_disk() is always passed with two NULL pointers and is a
    no operation so can be removed.

2012-10-30  Matthias Gehre <M.Gehre@gmx.de>

    Remove lp_device and lp_disk from GParted_Core (#683149)
    
    They were used like global variables.  Now they are moved to the
    functions that actually use them to make clearer how the data flow is.
    
    Bug #683149 - Cleanup(?): Remove lp_device and lp_disk from GParted_Core

2012-10-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise when Linux swap label is changed to blank (#685656)
    
    Use swaplabel to read the Linux swap label so that 1) a blank label can
    be read, and 2) to replace deprecated and removed vol_id.
    
    Vol_id was deprecated in May 2009, superseded by blkid and soon
    thereafter removed.  Swaplabel is available in util-linux 2.18 from Jun
    2010.
    
    If the swaplabel command is not available GParted falls back on reading
    the label through the FS_Info cache which uses the blkid command.  If
    the blkid command is also not available FS_Info cache will *NOT* return
    any label and GParted will display blank.
    
    Bug 685656 - GParted doesn't notice when file system label is changed to
                 blank

2012-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make GParted recognise reading blank file system labels (#685656)
    
    GParted doesn't notice when a file system label is changed to blank.
    GParted first calls the file system specific read_label() method.  When
    the label is blank read_label() correctly sets partition.label to the
    zero length string.  Second GParted_Core::set_device_partitions() treats
    the zero length string to mean that the label is unset and calls
    FS_Info::get_label() to retrieve it from the cache of blkid output.
    Blkid also doesn't notice when the file system label has been changed to
    blank so reports the previous label.  Hence GParted displays the
    previous file system label.
    
    Fix by making label a private member variable of the class Partition and
    providing access methods set_label(), get_label() and label_known()
    which track whether the label has been set or not.  This only fixes the
    fault for file systems which use file system specific commands to read
    the label and when these tools are installed.  Otherwise GParted uses,
    or has to fall back on using, the buggy blkid command to read the file
    system label.
    
    NOTE:
    Many of the file system specific read_label() methods use a tool which
    outputs more than just the label and use Utils::regexp_label() to match
    leading text and the label itself.  If the surrounding text changes or
    disappears altogether to indicated a blank label, regexp_label() doesn't
    match anything and returns the zero length string.  This  is exactly
    what is required and is passed to set_label() to set the label to blank.
    
    Bug 685656 - GParted doesn't notice when file system label is changed to
                 blank

2012-10-30  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2012-10-16  Yngve Spjeld Landro <l10n@landro.net>

    Updated Norwegian Nynorsk translation

2012-10-14  Rūdolfs Mazurs <rudolfsm@src.gnome.org>

    Updated Latvian translation

2012-10-11  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2012-10-10  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2012-10-10  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.14.0   ==========

2012-10-08  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2012-10-04  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2012-10-04  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2012-10-04  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation.

2012-10-03  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2012-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove old FIXME comment from reiserfs::read_label()
    
    Traced debugreiserfs on a 10GiB reiserfs file system which was 100% full
    full with nearly 900,000 files.  It read exactly three 4KiB blocks from
    different offsets and the program never took more than 0.1 seconds.

2012-09-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove old #include <cerrno> from jfs and xfs modules
    
    Use of errno disappeared from jfs and xfs when they switched to using
    helper functions for file system resizing.

2012-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Read file system size for mounted ext2/3/4 from superblock (#683255)
    
    A user had a 190 MiB partition containing an old ext2 file system.  When
    unmounted it was reported as filling the partition, but when mounted it
    was reported as having 6% unallocated space.  The file system's inode
    tables were approximately twice the size of those created by default
    with the current mkfs.ext2 defaults.
    
    To create an equivalent file system in a 190 MiB partition:
        mkfs.ext2 -N 97344 /dev/sda15
    
    It turns out that for ext2, ext3 and ext4 file systems what was
    described as intrinsic unallocated space during the development of
    Bug #499202 is actually file system overhead.  When mounted the ext2/3/4
    kernel code reports the size of the file system after subtracting the
    overhead.  Overhead is made up of superblock backups, group descriptors,
    allocation bitmaps and largest of all inode tables.  E2fsprogs tools
    don't subtract this overhead when reporting the file system size.
    
    References:
    
     *  The Second Extended File System, Internal Layout, by Dave Poirier
        http://www.nongnu.org/ext2-doc/ext2.html
    
     *  Linux ext2_statfs() function
        http://lxr.linux.no/#linux+v3.5.3/fs/ext2/super.c#L1311
    
    Call the file system specific method for reading the usage of ext2, ext3
    and ext4 file systems while mounted.  Make it read the file system size
    from the on disk superblock to avoid subtraction of overhead and use the
    statvfs() system call to return an up to date free space figure.
    
    Bug #683255 - ext2: statvfs differs from dumpe2fs (x MB unallocated
                  space within the partition)

2012-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make mounted partition usage method selectable per file system (#683255)
    
    Each file system class can now choose how the size and free space of the
    file system is determined when it is mounted.
    
        .fs.online_read = FS::NONE  (default)
            Do nothing.  Don't get the file system size and free space.
    
        .fs.online_read = FS::GPARTED
            Use internal GParted method which calls statvfs() system call on
            the mounted file system.
    
        .fs.online_read = FS::EXTERNAL
            Call the file system's member function set_used_sectors().  This
            is the same function as called when the file system is not
            mounted.   It can determine if the file system is mounted or not
            by testing partition.busy and acting accordingly.
    
    This means that determining the size and free space of active LVM2
    Physical Volumes is no longer a special case.  Instead the lvm2_pv class
    just elects to have its set_used_sectors() method called for both the
    active and deactive cases.
    
    Bug #683255 - ext2: statvfs differs from dumpe2fs (x MB unallocated
                  space within the partition)

2012-10-02  Akom Chotiphantawanon <knight2000@gmail.com>

    Updated Thai translation

2012-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using debugfs.reiser4 to read the label
    
    Vol_id command was deprecated in May 2009 and superseded by the blkid
    command.  Replace the generic vol_id command with the file system
    specific debugfs.reiser4 command to read the file system label.
    Debugfs.reiser4 will exist as it's already required to read the file
    system usage and UUID.

2012-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update file system specific validation of RFC 4122 UUIDs
    
    Use the new RFC 4122 none Nil UUID regular expression to validate the
    UUID read in all the Linux native file system specific read_uuid()
    methods.  No longer need to explicitly exclude "<none>" or all zeros Nil
    UUID as the regular expression does this.

2012-09-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using jfs_tune to read the UUID
    
    Not necessary but use the simpler file system tune command rather than
    the file system debug command where possible.  Also saves creating an
    echo process.

2012-09-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using debugreiserfs to read the UUID (#684115)
    
    For a mounted reiserfs file system with a Nil UUID (all zeros) GParted
    will display a partition specific warning.  This comes from the reiserfs
    specific read_uuid() method.  Error demonstration:
    
        # blkid /dev/sda15
        /dev/sda15: LABEL="test-reiserfs-2" TYPE="reiserfs"
        # mount | grep sda15
        /dev/sda15 on /mnt/2 type reiserfs (rw,relatime)
        # reiserfstune /dev/sda15
        reiserfstune: Reiserfstune is not allowed to be run on mounted filesystem.
    
    Switch to using debugreiserfs to read the UUID as it can be used on a
    mounted file system.
    
        # debugreiserfs /dev/sda15 2> /dev/null | grep UUI
        UUID: 00000000-0000-0000-0000-000000000000
    
    Bug #684115 - Reiserfs UUID reading issues on Fedora and CentOS

2012-09-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Ignore invalid reiserfs UUIDs (#684115)
    
    On Fedora up to and including Fedora 16 and Red Hat and CentOS up to the
    current 6.3 release the UUID of an unmounted reiserfs file system is
    displayed as "<no" and a GTK markup warning is written to the terminal.
    
    This was because the reiserfs-utils package isn't linked with libuuid
    support so reiserfs file systems were created with a Nil UUID (all
    zeros).  To read the UUID GParted first tries to retrieve the UUID from
    the blkid command output via the FS_Info cache.  Secondly it tries the
    reiserfs file system specific read_uuid() method which uses the first
    space separated word following the text "UUID:", hence it gets "<no".
    
        # debugreiserfs /dev/sda15 2> /dev/null | grep UUID
        UUID: <no libuuid installed>
    
    In September 2012 Red Hat bug 660285 "reiserfstune compiled without UUID
    support" was fixed for Fedora 16 and later releases.  On Fedora with
    this fix applied GParted will display the Nil UUID (all zeros) for a
    previously created reiserfs file system rather than suppressing it.
    
    Only accept valid, none Nil UUIDs in the reiserfs file system specific
    read_uuid() method.
    
    Bug #684115 - Reiserfs UUID reading issues on Fedora and CentOS

2012-09-16  Ani Peter <apeter@redhat.com>

    Updated Malayalam file

2012-09-15  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2012-09-12  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-09-12  Djavan Fagundes <djavanf@gnome.org>

    Updated Brazilian Portuguese translation by Fábio Nogueira <deb-user-ba@ubuntu.com> and myself

2012-09-09  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2012-09-09  Seong-ho Cho <darkcircle.0426@gmail.com>

    Updated Korean translation

2012-09-08  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2012-09-04  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2012-09-04  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2012-09-03  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-09-02  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-09-01  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2012-09-01  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patches by Mike Fleetwood to add LVM PV read-write
    support, and to prevent an ESC key crash in number entry dialogs.

2012-08-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Recognise lvm command immediately when rescanning for supported actions
    
    Rescanning for supported actions in the File System Support dialog was
    not detecting the removal and restoration of the lvm command.  GParted
    was only updating supported actions after refreshing all devices.
    
    Checking for the lvm command was tied to the refresh of the LVM2_PV_Info
    cache, hence the behaviour.  Fix by always checking for the lvm command
    when requested.
    
    Also remove extra new line from end of an error message in
    load_lvm2_pv_info_cache().

2012-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add a partition warning for LVM2 PVs which can't be resized (#670171)
    
    As LVM2 Physical Volumes can't be resized when they are members of
    exported Volume Groups add a warning message to explain this fact.
    Display the message as a partition specific warning and as additional
    text when growing the file system to fill the partition is skipped for
    the check operation and when pasting into an existing larger partition.
    
    Bug #670171 - Add LVM PV read-write support

2012-08-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Disallow resizing of LVM2 PVs which are members of exported VGs (#670171)
    
    When an inactive LVM2 Volume Group is exported it makes it unknown to
    the local system, ready for moving the member Physical Volumes to
    another system, where the VG can be imported and used.  In this state a
    PV can't be resized.
    
        # lvm pvresize /dev/sda10
          Volume group Test-VG1 is exported
          Unable to read volume group "Test-VG1".
          0 physical volume(s) resized / 1 physical volume(s) not resized
        # echo $?
        5
    
    Fix this by preventing resizing of such a PV.  This has been coded in a
    generic way using new function filesystem_resize_disallowed() to
    determine whether a file system is allowed to be resized or not.  For
    a file system which can be resized, but is currently not allowed to be
    resized, the behaviour is as follows:
    
    1)  Pasting into unallocated space is limited to creating a new
        partition which is the same size as the copied partition.
    
    2)  Resizing the partition is disallowed, only moving the partition is
        allowed.
    
    3)  Pasting into an existing partition will only copy the file system.
        If the destination partition is larger a warning will report that
        growing the file system is not currently allowed.
    
    4)  Checking a partition will also report a warning that growing the
        file system is not currently allowed.
    
    This is exactly the same behaviour as for a file system which does not
    implement resizing, except for a different warning message.
    
    Bug #670171 - Add LVM PV read-write support

2012-08-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement common LVM2_PV_Info cache search and index functions
    
    Create common cache search and index functions get_attr_by_name() and
    get_attr_by_row() as the existing ones, get_pv_attr_by_*() and
    get_vg_attr_by_*(), only differ from each other by the string vector
    they use.

2012-08-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Correctly show multiple "unknown device" LVM2 VG members (#670171)
    
    If an LVM2 Volume Group has two or more missing Physical Volumes, the VG
    is displayed as only having one "unknown device" because
    get_vg_members() only adds unique names to the list of members.
    
        # lvm pvcreate /dev/sda11 /dev/sda12 /dev/sda13
        # lvm vgcreate Test-VG1 /dev/sda11 /dev/sda12 /dev/sda13
        # wipefs -a /dev/sda12
        # wipefs -a /dev/sda13
        View partition information in GParted
    
    The simplest fix would be to include the PV's UUID in the cache of LVM2
    information and add PV names based on unique UUIDs being a member of the
    relevant VG.  Unfortunately "lvm pvs" seems to have a bug when
    displaying Logical Volume attributes, and there are two or more missing
    PVs, which causes one of the PVs to be displayed multiple times, rather
    than displaying each PV once.
    
    Without LV attributes, every PV is listed:
    
        # lvm pvs --nosuffix --separator , --units b -o pv_name,pv_uuid,vg_name,vg_attr 2> /dev/null
          PV,PV UUID,VG,Attr
          /dev/sda11,pJ3R51-AOPP-rKlr-CKCT-nfPS-G5FP-B5Vyjm,Test-VG1,wz-pn-
          unknown device,Y72oSm-uBcE-ktZL-OIFA-Q129-Uv1B-x5IsrA,Test-VG1,wz-pn-
          unknown device,1ESORF-7wlR-0tnO-fy2z-nOL1-MrnJ-2O5yjK,Test-VG1,wz-pn-
    
    With LV attributes, one missing PV is repeated:
    
        # lvm pvs --nosuffix --separator , --units b -o pv_name,pv_uuid,vg_name,vg_attr,lv_name,lv_attr 2> /dev/null
          PV,PV UUID,VG,Attr,LV,Attr
          /dev/sda11,pJ3R51-AOPP-rKlr-CKCT-nfPS-G5FP-B5Vyjm,Test-VG1,wz-pn-,,
          unknown device,Y72oSm-uBcE-ktZL-OIFA-Q129-Uv1B-x5IsrA,Test-VG1,wz-pn-,,
          unknown device,Y72oSm-uBcE-ktZL-OIFA-Q129-Uv1B-x5IsrA,Test-VG1,wz-pn-,,
    
    Also "lvm vgs" and "lvm lvs" don't display anything when including both
    VG and LV attributes.
    
    Instead query the LVM2 information in two separate commands, one
    querying PV attributes and one querying VG and LV attributes, saving the
    results in lvm_pv_cache and lvm_vg_cache respectively.
    
    Bug #670171 - Add LVM PV read-write support

2012-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove full stops from the end of primary text in dialogs
    
    The GNOME HIG, 3.4.1 "Alert Text" states:
    
        ...  The primary text is punctuated in 'newspaper headline' style,
        that is, it has no terminating period, but it may have a terminating
        question mark.
    
    http://developer.gnome.org/hig-book/3.0/windows-alert.html.en#alert-text

2012-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove outdated FIXME comment from active_partitions_on_device_count()
    
    Active LVM2 PVs have the partition class busy member set in
    GParted_Core::set_device_partitions() just as mounted file systems do.
    This is a basic requirement for GParted so that it only manipulates
    partitions and contained file systems when they are not in use.

2012-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    New LVM2_PV_Info::bit_set() testing VG and LV attribs "bits"
    
    Abstract repeated code used to test the setting of individual LVM Volume
    Group and Logical Volume "bits" attributes into bit_set() function.

2012-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update declarations of some LVM2_PV_Info member functions
    
    Add const qualifier to get_pv_attr_by_path() and get_pv_attr_by_row() as
    they only access member variables read-only.
    
    Make lvm2_pv_attr_to_num() a static member function as it doesn't access
    any member variables.

2012-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove redundant lines from LVM2_PV_Info functions
    
    Splitting of each cache string on comma "," is performed in
    get_pv_attr_by_row() and not needed in the caller functions.

2012-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Only lookup LVM2 VG name once in Display_Info()
    
    For LVM2 Physical Volumes the Volume Group name was looked up multiple
    times, sometimes from the secondary location of the mount point and at
    other times from the primary location in the LVM2_PV_Info class.  Just
    lookup the VG name once from the primary location.

2012-06-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename *toggle_swap_mount* -> *toggle_busy*
    
    Rename functions and a variable to use a generic term for the menu item
    which changes the busy state of partitions now that it also activates
    and deactivates LVM2 Physical Volumes as well as mounting and unmounting
    file systems and enables and disables swap partitions.

2012-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add fallback implementation to new delete LVM2 PV warning dialog (#670171)
    
    The new delete non-empty LVM2 Physical Volume warning dialog uses
    Gtk::MessageDialog::get_message_area() in the display of Volume Group
    members.  This function was new in gtkmm 2.22, released September 2010,
    which is not available in a number of current distributions including:
    Unbuntu 10.04 LTS, RHEL 6.3, SLES 11-SP2, Debian 6.0.
    
    Implement fallback method to display the VG name and member PVs in the
    warning dialog for when get_message_area() is not available.
    
    Bug #670171 - Add LVM PV read-write support

2012-07-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add warning dialog when deleting non-empty LVM2 PVs (#670171)
    
    When attempting to delete a non-empty LVM2 Physical Volume (one which is
    still a member of a Volume Group) display a warning dialog which
    includes the VG name and a list of the PV members to allow the user to
    make an informed choice whether to go ahead and perform the deletion or
    cancel to the operation.  This dialog is displayed when a partition
    containing a PV is being deleted or being overwritten by being
    reformatted or pasted into.
    
    Bug #670171 - Add LVM PV read-write support

2012-07-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add LVM2 VG member details to the Information dialog (#670171)
    
    For LVM2 Physical Volumes display the Volume Group name and all the
    members in the Information dialog.
    
    Bug #670171 - Add LVM PV read-write support

2012-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement LVM2 PV remove() method (#670171)
    
    Implement remove() method so that the LVM2 metadata is updated to
    reflect the removal of the LVM2 Physical Volume as well as removing the
    signature from the PV before the partition is deleted or overwritten.
        lvm pvremove /dev/DEVICE
    
    Also specifically force the removal of the PV when it is a member of a
    Volume Group so that it will succeed.
    
    RATIONAL:
    
    If the PV was not removed before the partition was deleted or
    overwritten, LVM2 would be left in a broken state with metadata
    describing missing PVs for any partially deleted VGs.  This leaves the
    user needing to perform recovery of a lost PV, which required in depth
    understanding of LVM2 and is beyond the scope of what GParted can
    currently provide.
    
    The alternative is to use the pvremove command to instruct LVM2 to
    remove the PV and update LVM2 metadata to reflect the removal of the PV.
    For PVs which are a member of a VG this includes forcing the removal.
    This has the impact of making recovery from accidental deletion of a
    partition containing a PV irrecoverable.  GParted is not able to recover
    this situation anyway because Device -> Attempt Data Rescue, using the
    gpart command, is not able to detect the signature of an LVM2 PV.
    
    Choose to remove the PV, forcibly if required, rather than potentially
    leave LVM2 with missing PVs.
    
    Bug #670171 - Add LVM PV read-write support

2012-07-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add file system specific remove() methods (#670171)
    
    This commit only adds a remove() method to every file system and an
    optional call to it in the relevant operations.  All remove() methods
    are no operations and not enabled.
    
    The remove() method provides explicit controlled removal of a file
    system before the partition is deleted or overwritten by being formatted
    or pasted into.  When implemented, it appears as an extra step in the
    relevant operation.  The file system specific remove() method is
    explicitly allowed to fail and stop the operations currently being
    applied.
    
    This is different to the existing erase_filesystem_signatures() which
    wipes any previous file system signatures immediately before a new file
    system is written to ensure there is no possibility of the partition
    containing two or more different file system signatures.  It never fails
    or reports anything to the user.
    
    NOTE:
    Most file systems should NOT implement a remove() method as it will
    prevent recovery from accidental partition deletion.
    
    Bug #670171 - Add LVM PV read-write support

2012-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add LVM2 PV resize, check and move operations (#670171)
    
    Copy operation for LVM2 Physical Volumes is deliberately not implemented
    because it doesn't fit with how LVM2 works and is not safe in the
    general case without an understanding of its internals.  See comment in
    lvm2_pv::copy() for more details.
    
    Bug #670171 - Add LVM PV read-write support

2012-02-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enable LVM2 VG activation / deactivation (#670171)
    
    In the Partition menu enable activation / deactivation of the LVM2
    Volume Group of which the Physical Volume is a member.
    
    Bug #670171 - Add LVM PV read-write support

2012-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add creation of LVM2 PVs (#670171)
    
    Add creation of Physical Volumes specifying LVM2 metatdata format:
        lvm pvcreate -M 2 /dev/DEVICE
    
    Also set the partition type to identify its contents as LVM.  Note that
    libparted treats every partition type as a file system except LVM which
    it treats as a flag, hence GParted displaying "lvm" in the Manage Flags
    dialog.  Never the less libparted set the partition types correctly.
    For MBR partitioning the type is 8e "Linux LVM" and for GPT partitioning
    the type is E6D6D379-F507-44C2-A23C-238F2A3DF928.  Setting the partition
    type as LVM is not strictly required as LVM2 scans the contents of all
    partitions looking for PVs, but it is best practice.
    
    Bug #670171 - Add LVM PV read-write support

2012-08-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent crash from pressing Esc in dialogs with number entry (#682658)
    
    Steps to reproduce:
    1) Open any of these dialogs: Create New Partition, Resize/Move or
       Paste;
    2) Update any of the following numeric entry fields to a different value
       using the keyboard: Free space preceding, New size or Free space
       following;
    3) Press [Esc] key;
    Gparted crashes.
    
    What is happening is that the [Esc] key is leading to the dialog being
    closed and calling the ~Dialog_Base_Partition() destructor.  However
    after this the GTK widget is calling the on_spinbutton_value_change()
    registered callbacks for the change to the other two values, on the now
    just deleted object.
    
    Fix by disconnecting the change notification callbacks in the
    destructor.
    
    Closes bug #682658 - GParted crash by pressing Esc in dialogs with
                         number entry

2012-08-30  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2012-08-11  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2012-08-08  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2012-08-08  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.13.1   ==========

2012-08-07  Tom Tryfonidis <tomtryf@gmail.com>

    Updated Greek translation

2012-08-07  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2012-08-05  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2012-08-05  Yngve Spjeld Landro <l10n@landro.net>

    Added Norwegian Nynorsk translation

2012-07-29  Joan Lledó <joanlluislledo@gmail.com>

    Fix failure creating read-only view of rescued file systems (#680740)
    
    The mount of lost file systems that were larger than a 32 bit integer
    could hold (~2 GiB), or started after the first ~2 GiB of disk, would
    fail.
    
    Closes Bug #680740 - Gparted fails when mounting the read-only view of
                         lost filesystems

2012-07-26  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2012-07-17  Wylmer Wang <wylmerwang@src.gnome.org>

    Update Chinese translation

2012-07-15  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2012-07-13  Enrico Nicoletto <liverig@gmail.com>

    Updated Brazilian Portuguese translation

2012-07-13  Curtis Gedak <gedakc@gmail.com>

    Minor spelling and word changes to NEWS for last release

2012-07-13  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2012-07-13  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.13.0   ==========

2012-07-12  Curtis Gedak <gedakc@gmail.com>

    Add more contributors to AUTHORS
    
    Scanned ChangeLog and added some GParted code contributors that had
    been accidentally missed from being included in the AUTHORS file.

2012-07-11  Aleksej Kabanov <ak099@mail.ru>

    Updated Russian translation

2012-07-11  Aleksej Kabanov <ak099@mail.ru>

    Updated Russian translation

2012-07-10  Alexander Shopov <ash@kambanaria.org>

    Updated Bulgarian translation

2012-07-10  Alexander Shopov <ash@kambanaria.org>

    Updated Bulgarian translation

2012-07-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make btrfs_size_*() static member functions
    
    The member functions btrfs_size_to_num(), btrfs_size_max_delta() and
    btrfs_size_to_gdouble() don't access any member variables.  Therefore
    they don't need the const qualifier allowing them to be called when the
    btrfs object is const for read-only access to member variables, but
    instead need to be static member functions with no access to member
    variables.

2012-07-05  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation.

2012-07-05  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2012-07-05  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2012-06-30  Curtis Gedak <gedakc@gmail.com>

    Provide credit in About dialog for significant contributions (#678486)
    
    Closes Bug #678486 - Provide Credit in About Dialog for Significant
                         Contributions

2012-06-30  Curtis Gedak <gedakc@gmail.com>

    Reorder names and add significant contribution reminder to AUTHORS

2012-06-30  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Update email address for Seth Heeren

2012-06-30  Curtis Gedak <gedakc@gmail.com>

    Avoid end partition overlap when resizing extended partition (#678831)
    
    When resizing an extended partition, a problem can occur with MiB
    alignment wherein the requested end sector could be less than the end
    sector of the last logical partition.  This would be an invalid
    geometry because all the logical partitions must be wholly contained
    within the extended partition.
    
    Check for this situation and if found then set requested end for
    the extended partition to the end of the last logical partition.
    
    Closes Bug #678831 - Partition End Overlap when Resizing Extended
                         Partition

2012-06-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Restore original logic regarding negative values in get_usage_triple()
    
    Restore intended logic accidentally changed by my recent commit:
    
        Simplify calc_usage_triple() interface and rename
        6c96ab34b39eb23a906d6161a3d3b873025f4ec3
    
    Set each display integer to zero if the associated usage value is
    negative, rather than setting 100% unused for unknown usage.  Graphical
    display of partition usage for unknown and unsupported file system types
    is not affected and continues to be all white because of the logic in
    the callers.

2012-06-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove and rename local variables in Display_Info()
    
    Local variables used, unused and unallocated were hiding class member
    variables of the same name.  Remove first two local variables as they
    were only accessed once and rename third.

2012-06-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify calc_usage_triple() interface and rename
    
    Now that every call to calc_usage_triple() just passes usage figures
    returned by get_sectors_*(), remove those parameters, call
    get_sectors_*() internally and rename to get_usage_triple().

2012-06-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify main window partition usage graphic code
    
    Stop using fraction_unallocated and fraction_used member variables of
    the DrawingAreaVisualDisk class as intermediate storage of partition
    usage fractions.  Instead get the figures straight from the partition
    class and use the new calc_usage_triple() to directly set pixels widths
    for the partition usage graphic.

2012-06-20  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix minor unallocated space display issue in the Info dialog (#499202)
    
    For specific partition usage values the right hand border of the
    partition graphic in the Information dialog would be displayed as grey
    rather than the color assigned to the partition.
    
    Steps to reproduce fault:
        Create 1024 MiB partition
        # lvm pvcreate /dev/sda12
        # lvm vgcreate GParted-VG1 /dev/sda12
        View partition information
    
    Fragment from Dialog_Partition_Info::init_drawingarea():
        139  else if ( partition .sector_usage_known() )
        140  {
        141          used        = Utils::round( ( 400 - BORDER *2 ) / ( dlength / partition .get_sectors_used()   ) ) ;
        142          unused      = Utils::round( ( 400 - BORDER *2 ) / ( dlength / partition .get_sectors_unused() ) ) ;
        143          unallocated = 400 - BORDER *2 - used - unused ;
        144  }
    
    For this issue the above values are both exactly x.5 and both round
    upwards, resulting in unallocated being -1.
        used        = round((400 - 8*2)/(2097152.0/8192))    = round(1.5)
        unused      = round((400 - 8*2)/(2097152.0/2088960)) = round(382.5)
        unallocated = 400 - 8*2 - 2 - 383 = -1
    
    The simple fix would be to use floor() instead of round() in the
    calculation of either used or unused.  The same fix would also need to
    be applied in Display_Info() for the calculation of the percentage
    figures.  Unfortunately this simple fix can lead to odd figures when the
    used or unused is close to zero and floor() or ceil() is effectively
    applied rather than round().  For example:
        Size:           227.23 GiB
        Used:           28.00 KiB   ( 1% )
        Unused:         180.00 GiB  ( 79% )
        Unallocated:    47.23 GiB   ( 20% )
    Used figure of 28 KiB in 227 GiB partition should be rounded to 0% but
    wasn't.
    
    Write Partition::calc_usage_triple() which calculates the "best" figures
    by rounding the smaller two figures and subtracts them from the desired
    total for the largest figure.  Apply to the calculation of the partition
    usage percentage figures in the Information dialog and the partition
    usage graphic in the same dialog and the main window.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-06-24  Wylmer Wang <wantinghard@gmail.com>

    update Simplified Chinese (zh_CN) translation

2012-06-21  Curtis Gedak <gedakc@gmail.com>

    Update credits in about dialog for artwork
    
    Provide credit for the Tango themed icons designed by Sebastian Kraft.

2012-06-18  Curtis Gedak <gedakc@gmail.com>

    Fix one spelling mistake in en_CA translation
    
    "file sysem" --> "file system"

2012-06-20  Rūdolfs Mazurs <rudolfsm@src.gnome.org>

    Updated Latvian translation

2012-06-19  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-06-18  Rogier Goossens <goossens.rogier@gmail.com>

    Updated Dutch translation

2012-06-18  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-06-18  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS
    
    Provide credit for patch set by Mike Fleetwood to show when partition
    size differs from file system size.

2012-06-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't show intrinsic unallocated space (#499202)
    
    Most file systems report intrinsic unallocated space using the statvfs()
    system call when mounted, but not using their own tools.  They are:
    ext2/3/4, fat16/32, hfs, nilfs2, reiserfs and xfs.  Showing either a
    little or no unallocated space, depending on whether a file system is
    mounted or not, could be confusing to the user.
    
    When all file systems are created filling their partitions the unused
    figure reported by statvfs() and their own tools are the same or very
    close.  Also the used plus unallocated figure from statvfs() agrees with
    the used figure from their own tools.
    
    For all file systems don't display intrinsic unallocated space (that
    below the threshold of 2 to 5%), instead include it as used space.  As
    soon as the amount of unallocated space becomes significant display it
    everywhere and also trigger the warning.
    
    For display purposes always use the new Partition methods:
    get_sectors_used(), get_sectors_unused(), and get_sectors_unallocated().
    When calculating new usage figures during Paste and Resize/Move
    operations directly access sectors_used, sectors_unused and
    sectors_unallocated members.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-06-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Enhance calculation of significant unallocated space (#499202)
    
    Many file systems report differing percentages of unallocated space over
    a range of sizes, as well differing figures using their own specific
    tools or using statvfs() system call when mounted.
    
    File systems reporting intrinsic unallocated space using their specific
    tools are: jfs, lvm2 pv and ntfs.  LVM2 PV has the largest amount of
    unallocated space with its default Physical Extent size of 4 MiB.  For a
    100 MiB partition it has 4.0% unallocated space.
    
    File systems reporting intrinsic unallocated space using the statvfs()
    system call when mounted are: ext2/3/4, fat16/32, hfs, jfs, nilfs2,
    ntfs, reiserfs, and xfs.  Xfs has the worst identified unallocated space
    of ~4.7% in a 100 MiB partition.  Ext2/3 exhibit unusual behaviour by
    reporting unallocated space of ~4.6% in a 100 MiB partition falling to a
    constant percentage of ~1.8% for sizes of 1 GiB and above.
    
    Update the calculation for used to estimate the maximum size of
    intrinsic unallocated space.  Limit is now 5% for partitions smaller
    than 100 MiB, 2% for partitions larger than 1 GiB and linear scaling of
    the percentage between.  Will still get false unallocated space warnings
    for mounted xfs file systems and lvm2 pvs smaller than 100 MiB.
    
    Also add a short note and worked example calculation of unallocated
    space to the HACKING file.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Include intrinsic unallocated space for resizing purposes (#499202)
    
    A number of file systems report intrinsic unallocated space even when
    they are created filling the partition.  As reported using their own
    specific tools, they are: jfs, lvm2 pv and ntfs.  Therefore when
    resizing a partition estimate its minimum size to be used sectors plus
    any unallocated sectors up to the significant amount.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-05-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Handle btrfs tools rounding of figures (#499202)
    
    The btrfs programs only provide approximations of file system sizes
    because they display figures using binary prefix multipliers to two
    decimal places of precision.  E.g. 2.00GB.  For partition sizes where
    the contained file system size rounds upwards, GParted will fail to read
    the file system usage and report a warning because the file system will
    appear to be larger than the partition.
    
    For example, create a 2047 MiB partition containing a btrfs file system
    and display its size.
    
        # btrfs filesystem show
        Label: none  uuid: 92535375-5e76-4a70-896a-8d796a577993
                Total devices 1 FS bytes used 28.00KB
                devid    1 size 2.00GB used 240.62MB path /dev/sda12
    
    The file system size appears to be 2048 MiB, but that is larger than the
    partition, hence the issue GParted has.  (Actually uses the btrfs devid
    size which is the size of the btrfs file system within the partition in
    question).
    
    This issue is new with the fix for Bug #499202 because it queries the
    file system sizes for the first time.  The same issue could
    theoretically occur previously, but with the used figure (FS bytes
    used).  This would have been virtually impossible to trigger because
    btrfs file system would have to have been greater than 99% full, but
    btrfs has been notorious for early reporting of file system full.
    
    The fix is that if a btrfs file system size appears larger than the
    partition size, but the minimum possible size which could have been
    rounded to the reported figure is within the partition size use the
    smaller partition size instead.  Apply the method to the used figure
    too, in case the file system is 100% full.  Also if the btrfs file
    system size appears smaller than the partition size, but the maximum
    possible size which could have been rounded to the reported figure is
    within the partition size use the larger partition size instead to avoid
    reporting, presumably false, unallocated space.  Not applied to file
    system used figure.
    
    Bug 499202 - gparted does not see the difference if partition size
                 differs from filesystem size

2012-03-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set unallocated space for paste or resize/move operations (#499202)
    
    When pasting a copied partition into free space or move/resizing a
    partition set its space utilisation so that any unallocated space within
    the partition is displayed correctly before the operation is applied.
    
    NOTE:
    If the file system does not support file system resizing the Paste and
    Move/Resize dialogs don't allow resizing the partition so the preview
    will always be correct, unlike the case in the previous patch:
        Set unallocated space when performing simple operations (#499202)
    
    Also remove the deprecated and no longer used Partition::Set_Unused()
    and Partition::set_used() methods.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-04-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set unallocated space when performing simple operations (#499202)
    
    When pasting a copied partition into an existing partition set its space
    utilisation so that any unallocated space is displayed correctly before
    the operation is applied.  If the destination partition is larger the
    file system will be grown to fill the partition.
    
    NOTE:
    GParted will attempt to grow the the file system in this situation
    regardless of whether the file system supports it or not.  These file
    systems: exfat, hfs, hfs+, reiser4 and ufs can't be grown and will fail
    with "growing is not available for this file system".  The preview will
    also be wrong in this case for the same reason.  Everything will be
    depicted correctly after the refresh.
    
    When formatting an existing partition default its space utilisation to
    unknown for display before the operation is applied.
    
    Bug 499202 - gparted does not see the difference if partition size
                 differs from filesystem size

2012-01-21  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display unallocated space in the main window (#499202)
    
    Display the unallocated space within a partition in the main window's
    graphical disk representation.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-01-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Query unallocated space via libparted (#499202)
    
    Update the implementation using libparted to set the file system size
    and free space, thus allowing the unallocated space in the partition to
    be calculated, for the following unmounted file systems:
        hfs, hfs+
    (Requires libparted <= 2.4 or libparted >= 3.1, as the needed
    functionality did not exist in libparted 3.0).
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Query unallocated space for LVM2 PVs (#499202)
    
    Add reporting of the LVM2 Physical Volume size allowing the unallocated
    space in the partition to be calculated.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Query unallocated space for unmounted file systems (#499202)
    
    Update file system specific implementations to set the size and free
    space, thus allowing the unallocated space in the partition to be
    calculated, for the following unmounted file systems:
        btrfs, ext2, ext3, ext4, fat16, fat32, jfs, nilfs2, ntfs, reiserfs,
        reiser4, xfs
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display unallocated space in the information dialog (#499202)
    
    Display the unallocated space in the graphical partition representation
    and numeric figures in the Partition Information dialog.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Record unallocated space within a partition (#499202)
    
    Currently GParted assumes that a file system fills its containing
    partition.  This is not always true and can occur when resizing is
    performed outside of GParted or a resize operation fails.  GParted
    doesn't display any information about unallocated space to the user
    and in most cases it is simply included in used space.
    
    Add partition unallocated space accounting.  Make GParted record the
    unallocated space for mounted file system and display a warning in the
    Partition Information dialog when too much unallocated space is found.
    
    Partition::set_sector_usage( fs_size, fs_unused ), is the new preferred
    method of recording file system usage because it allows the unallocated
    space in a partition to be calculated.  Partition::Set_Unused() and
    Partition::set_used() are now deprecated.
    
    NOTES:
    
    1)  Set the minimum unallocated space to be 5% before considering it
        significant to avoid false reporting.  Worst case found was a
        mounted xfs file system in a 100MiB partition, which reports as
        ~4.7% unallocated according to file system size from statvfs().
        However, it reports as having no unallocated space using xfs
        specific tools.
    
    2)  Unallocated space is only a graphical representation for the user.
        GParted must still use relevant tools to resize file systems before
        shrinking the data and can't assume all unallocated space exists
        after the file system at the end of the partition.
    
    Bug #499202 - gparted does not see the difference if partition size
                  differs from filesystem size

2012-06-12  Curtis Gedak <gedakc@gmail.com>

    Fix more spelling mistakes in en_CA translation
    
    "couln"    --> "could"
    "fromt he" --> "from the"
    "pendingi" --> "pending"

2012-05-22  Curtis Gedak <gedakc@gmail.com>

    Fix spelling mistake in two sentences in en_CA translation
    
    "fil esystem" --> "file system"

2012-05-22  Curtis Gedak <gedakc@gmail.com>

    Minor indentation change to NEWS for last release

2012-04-16  Pavol Klačanský <pavol@klacansky.com>

    Updated Slovak translation

2012-04-12  Ahmad Gharbeia <gharbeia@gmail.com>

    Updated Arabic translation

2012-04-09  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2012-04-09  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.12.1   ==========

2012-04-09  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2012-04-03  Joan Lledó <joanlluislledo@gmail.com>

    Fix attempt data rescue fail to open read-only view (#673246)
    
    Dialog_Rescue_Data::on_view_clicked(): String::ucompose() no longer
    used due to a bug with some locales.

2012-04-01  Rogier Goossens <goossens.rogier@gmail.com>

    Fix for FS flags becoming unknown after change label
    
    AFAICS, there is no reason to manually copy all partition fields,
    or to manually initialize the copy of the new partition object.
    So now the partition object is simply copied using assignment.

2012-04-01  Rogier Goossens <goossens.rogier@gmail.com>

    Fix for FS size & flags becoming unknown after change UUID
    
    AFAICS, there is no reason to manually copy all partition fields,
    or to manually initialize the copy of the new partition object.
    So now the partition object is simply copied using assignment.

2012-04-02  Sasi Bhushan <sasi@swecha.net>

    Updated Telugu Translation

2012-04-01  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2012-03-31  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2012-03-31  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2012-03-31  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2012-03-31  Arash Mousavi <amousavi@src.gnome.org>

    Updated Persian Translations

2012-03-31  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2012-03-30  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2012-03-30  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-03-27  Curtis Gedak <gedakc@gmail.com>

    Ensure Align to MiB does not overlap following partition (#661744)
    
    Normally the GUI should restrict partitions from overlapping other
    partitions.  However we have received a report where an overlap has
    occurred.
    
    Unfortunately we did not have enough details to recreate the problem.
    Based on the report my thoughts are that somehow the problem arose
    due to partitions aligned to boundaries other than MiB in combination
    with the size of a partition being rounded up in the GUI resizer.
    
    In an effort to prevent this problem in the future I have added a
    check for primary or extended partitions overlapping other primary or
    extended partitions.
    
    Closes Bug #661744 - libparted "Can't have overlapping partitions."
                         after successful move+resize?!

2012-03-27  Curtis Gedak <gedakc@gmail.com>

    Rework align to MiB adjustments to end sector of partition
    
    Ensure at least 2 sectors for Extended Boot Record (EBR) between end
    of logical partition and start of next logical partition.
    
    Ensure at least 34 sectors reserved for backup GUID Partition Table
    (GPT) after the end of the last partition.

2012-03-25  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-03-25  Curtis Gedak <gedakc@gmail.com>

    Use cached method first to read UUID to shorten scan time

2012-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix uninitialised read when pasting into an existing partition
    
    GParted_Core::set_device_partitions() creates and initialises the
    partition objects based on the partitions on the disk using
    partition.Reset() and partition.Set().  These methods never set the
    alignment attribute.
    
    Copy and pasting into an existing partition calls GParted_Core::
    snap_to_alignment() to adjust the start and end of the newly created
    in memory partition object.  When pasting into unallocated space the
    user has selected the required alignment and this is exactly what is
    needed.  However when pasting into an existing partition the in memory
    partition object should always match the actual partition boundaries on
    disk.  Unfortunately the partition boundaries are adjusted based on
    reading the uninitialised alignment attribute.
    
    Initialise the alignment attribute of newly created partition objects to
    ALIGN_STRICT.  Also, when pasting into an existing partition set the
    alignment of that partition object to ALIGN_STRICT so that no boundary
    adjustment is performed.
    
    valgrind:
    ==6845== Conditional jump or move depends on uninitialised value(s)
    ==6845==    at 0x80C779A: GParted::GParted_Core::snap_to_alignment(...) (GParted_Core.cc:566)
    ==6845==    by 0x810C115: GParted::Win_GParted::Add_Operation(...) (Win_GParted.cc:692)
    ==6845==    by 0x8110499: GParted::Win_GParted::activate_paste() (Win_GParted.cc:1649)
    ...
    ==6845== Conditional jump or move depends on uninitialised value(s)
    ==6845==    at 0x80C77A8: GParted::GParted_Core::snap_to_alignment(...) (GParted_Core.cc:568)
    ==6845==    by 0x810C115: GParted::Win_GParted::Add_Operation(...) (Win_GParted.cc:692)
    ==6845==    by 0x8110499: GParted::Win_GParted::activate_paste() (Win_GParted.cc:1649)
    
    GParted_Core.cc:
       562  bool GParted_Core::snap_to_alignment( const Device & device, Partition & partition, Glib::ustring & error )
       563  {
       564          bool rc = true ;
       565
    >> 566          if ( partition .alignment == ALIGN_CYLINDER )
       567                  rc = snap_to_cylinder( device, partition, error ) ;
    >> 568          else if ( partition .alignment == ALIGN_MEBIBYTE )
       569                  rc = snap_to_mebibyte( device, partition, error ) ;
       570
    
    Closes Bug #672654 - Pasting into an existing partition may shrink
                         GParted's representation of it

2012-03-24  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2012-03-18  Curtis Gedak <gedakc@gmail.com>

    Fix typographical error in en_CA translation
    
    "partition tot he right" --> "partition to the right"

2012-02-14  Curtis Gedak <gedakc@gmail.com>

    Fix two typos in en_CA translation
    
    "Mounte" --> "Mount"
    "secotor" --> "sector"

2012-03-20  Mario Blättermann <mario.blaettermann@gmail.com>

    [l10n] Updated German translation

2012-03-19  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-03-19  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-03-19  Curtis Gedak <gedakc@gmail.com>

    Make all move warning strings translatable

2012-03-17  Curtis Gedak <gedakc@gmail.com>

    Ensure space for EBR when resizing Extended partition (#664050)
    
    When resizing an extended boot record we must ensure that at least 2
    sectors is reserved in front of the nearest logical partition for the
    Extended Boot Record.
    
    Please note that unless specifically told otherwise, the Linux kernel
    considers Extended Boot Records to be two sectors long, in order to
    "leave room for LILO".
    
    Closes Bug #664050 - Unable to resize extended partition

2012-03-16  Curtis Gedak <gedakc@gmail.com>

    Add requested partition details to log when resize/move fails

2012-03-17  Rudolfs Mazurs <rudolfs.mazurs@gmail.com>

    Updated Latvian translation.

2012-03-13  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Improve reiser4 file system uuid reading method
    
    Previously used "fsck.reiser4" to perform a file system check with a by
    product of outputting the uuid.  However this performs a lot of disk I/O
    and takes a while to complete.  Instead use the much faster and less
    resource intensive "debugfs.reiser4" tool to retrieve the uuid.

2012-03-15  Praveen Arimbrathodiyil <pravi.a@gmail.com>

    Malayalam translation updated by Anish

2012-03-05  Algimantas Margevičius <margevicius.algimantas@gmail.com>

    Updated Lithuanian translation

2012-03-03  Curtis Gedak <gedakc@gmail.com>

    Enable new fs resize library available with parted-3.1 (#668281)
    
    The parted-3.1 release brings back FAT16/FAT32 and HFS/HFS+ file
    system resize capabilities in a new libparted fs resize library.
    
    The following operations are again available when GParted is linked
    with parted-3.1:
    
       FAT16 - grow and shrink
       FAT32 - grow and shrink
       HFS   - shrink
       HFS+  - shrink
    
    Note that there is a difference in how move actions are handled for
    FAT16/FAT32 file systems based on parted version.
    
    When GParted is linked with parted >= 3.0:
    
       FAT16 - move performed internally by GParted
       FAT32 - move performed internally by GParted
    
    When GParted is linked with parted < 3.0:
    
       FAT16 - move performed by libparted
       FAT32 - move performed by libparted
    
    Thanks goes to Jim Meyering for restoring these file system resizing
    capabilities in Parted 3.1 with a new libparted fs resize library.
    
    Closes Bug #668281 - minimal file-system resize API? (FAT and HFS*
                         only)

2012-02-28  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-02-28  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2012-02-23  Curtis Gedak <gedakc@gmail.com>

    GParted - Add screen shot to ru translation
    
    Add GParted window screen shot to help manual.
    
    Note that the image has been resized to a maximum width of 510 pixels
    as recommended in the GNOME-STYLE use of screenshots:
    
    Image Width
    http://developer.gnome.org/gdp-style-guide/stable/screenshot-4.html.en

2012-02-23  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-02-22  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated Romanian Translation

2012-02-22  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-02-16  Gabriel Speckhahn <gabspeck@gmail.com>

    Updated Brazilian Portuguese translation

2012-02-21  Kjartan Maraas <kmaraas@gnome.org>

    Updated Norwegian bokmål translation

2012-02-21  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2012-02-21  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.12.0   ==========

2012-02-21  Praveen Arimbrathodiyil <pravi.a@gmail.com>

    gparted Malayalam translations by Anish A

2012-02-20  Joe Hansen <joedalton2@yahoo.dk>

    Updated Danish translation

2012-02-20  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2012-02-18  Curtis Gedak <gedakc@gmail.com>

    Restore write label capability for linux-swap
    
    The setting of the write label capability for linux-swap was lost
    when it was overwritten in the following commit:
    
    Add support for setting UUID (#667278)
    9e96159bb2e6a843ac9465b340ad5f32b0320937

2012-02-18  Rogier Goossens <goossens.rogier@gmail.com>

    New partition dialog: first filesystem in list is always included
    
    Even if invalid, the first filesystem in list is always included.
    
    This is an off-by-one error, which was triggered when the first member
    of FILESYSTEMS was no longer a regular filesystem, as a result of
    commit ce9feeda0e9a04da04cec0a1b01512ed68c2495c:
    'Make FileSystem objects in GParted_Core accessible and usable by others'

2012-02-18  Rogier Goossens <goossens.rogier@gmail.com>

    Fix for implicit assumption that 'FS_UNKNOWN' is last in FILESYSTEMS list
    
    This assumption was invalidated by commit
    ce9feeda0e9a04da04cec0a1b01512ed68c2495c:
    'Make FileSystem objects in GParted_Core accessible and usable by others'
    
    This patch removes the dependency on this implicit assumption.

2012-02-18  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2012-02-18  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2012-02-16  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2012-02-16  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-02-15  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2012-02-15  Mario Blättermann <mario.blaettermann@gmail.com>

    [l10n] Updated German doc translation

2012-02-15  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-02-14  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-02-14  Curtis Gedak <gedakc@gmail.com>

    Fix regression when shrinking, moving and copying swap (#670017)
    
    Since linux-swap does not contain data and does not have a resize
    command, linux-swap is recreated instead of moved, copied, or resized.
    
    GParted 0.11.0 contained the following enhancement:
    Bug #663980 - Avoid redundant file system maximize actions
    
    An unfortunate side effect of this change was that the required
    maximize action to recreate linux-swap would not occur when the new
    size for the partition was less than or equal to the original size.
    
    The changes associated with this commit address this regression.
    
    Closes Bug #670017 - Corrupting swap partitions

2012-02-14  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2012-02-13  Bruno Brouard <annoa.b@gmail.com>

    Updated French doc translation

2012-02-13  Bruno Brouard <annoa.b@gmail.com>

    Updated French translation

2012-02-13  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2012-02-13  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2012-02-12  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-02-12  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2012-02-12  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-02-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Warn when an LVM2 PV is a member of a damaged VG (#160878)
    
    Generate a warning for each LVM2 Physical Volume which is a member of a
    Volume Group which has other members missing.
    
    Bug #160787 - lvm support

2012-02-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display VG export status with an LVM2 PVs busy status (#160787)
    
    Also update to use LVM terminology, such that a Physical Volume is
    referred to as a member of a Volume Group.  Status of an LVM2 PV is now
    displayed using one of the following messages:
        Not active (Not a member of any volume group)
        VGNAME not active
        VGNAME not active and exported
        VGNAME active
    
    Bug #160787 - lvm support

2012-02-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Prevent crash in the LVM2 PV information cache (#160787)
    
    GParted would crash if there were any embeded spaces in the output from
    the command used to query LVM2 PVs.  There aren't normally any embeded
    spaces, but they can occur in certain degrated situations.  For example
    if one of the PVs in a VG spanning two PVs is lost the PV is displayed
    as "unknown device" rather than its actual device name:
    
        # lvm pvs --nosuffix --units b --separator , -o pv_name,pv_free,vg_name,lv_name,lv_attr
          Couldn't find device with uuid DMEi8r-9Vvy-w0Ok-CSSn-oLmY-YrY3-1PBznz.
          PV,PFree,VG,LV,Attr
          /dev/sda11,2143289344,GParted-VG1,,
          unknown device,1619001344,GParted-VG1,lvol0,-wi---
          unknown device,1619001344,GParted-VG1,,
    
    This was loaded into the cache as:
    
        ["/dev/sda11,2143289344,GParted-VG1,,",
         "unknown",
         "device,1619001344,GParted-VG1,lvol0,-wi---",
         "unknown",
         "device,1619001344,GParted-VG1,,"]
    
    The crash would happen when trying to access the VG name or LV flags on
    a line without enough comma separated fields.
    
    Improve parsing of the output from "lvm pvs" so that lines are not split
    on embeded spaces.  Don't crash on lines without without enough comma
    separated fields.
    
    Bug #160787 - lvm support

2012-02-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display any errors from querying LVM2 PVs to the user (#160787)
    
    Previously any errors which occurred when running LVM commands used to
    load the LVM2_PV_Info cache were simply ignored and the cache wasn't
    loaded.  This lead to missing information about LVM2 PVs, but the user
    had no indication as to why.
    
    Now when any errors occur the command ran and all output is captured.
    This is displayed to the user, along with a suitable warning message, in
    the Partition Information dialog.
    
    Bug #160787 - lvm support

2012-02-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix detection of LVM2 PV busy status when exported VGs exist (#160787)
    
    If a Volume Group is exported the "lvm lvs" command returns non-zero
    exit status causing its output to not be loaded into the LVM2_PV_Info
    cache and detection of busy Physical Volumes completely fail.
    
        # lvm lvs -o lv_name,vg_name,lv_attr
          Volume group GParted_VG4 is exported
          LV    VG          Attr
          lvol0 GParted-VG2 -wi---
          lvol0 GParted_VG3 -wi-a-
          lvol1 GParted_VG3 -wi-a-
        # echo $?
        5
    
    Switch to using "lvm pvs" to query all cached information using one
    command, which doesn't return non-zero when exported VGs exist.
    
        # lvm pvs --nosuffix --units b -o pv_name,pv_free,vg_name,lv_name,lv_attr
          PV         PFree      VG          LV    Attr
          /dev/sda10 2147483648
          /dev/sda11 2143289344 GParted-VG1
          /dev/sda12 1619001344 GParted-VG2 lvol0 -wi---
          /dev/sda12 1619001344 GParted-VG2
          /dev/sda13  830472192 GParted_VG3 lvol0 -wi-a-
          /dev/sda13  830472192 GParted_VG3 lvol1 -wi-a-
          /dev/sda13  830472192 GParted_VG3
          /dev/sda14 1619001344 GParted_VG4 lvol0 -wi---
          /dev/sda14 1619001344 GParted_VG4
        # echo $?
        0
    
    Bug #160787 - lvm support

2012-02-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Don't ignore any errors resizing btrfs on Linux >= 3.2 (#669389)
    
    Btrfs file system can be successfully resized to the same size without
    failing on Linux 3.2 or higher.
    
    Linux 3.2-rc4 includes commit:
        35bae54a255fbf3eab747b842d300d59f6e1abb4
        Btrfs: Don't error on resizing FS to same size
    
    Closes bug #669389

2012-02-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Create helper functions to check for minimum kernel version
    
    Create function Utils::kernel_version_at_least() to check that the
    current Linux kernel is a particular version or higher.
    
    Update nilfs2 to use this function to determine whether the kernel is
    new enough to support file system resizing.

2012-02-08  Rogier Goossens <goossens.rogier@gmail.com>

    Remove temporary file after reading UUID of fat16 and fat32 filesystems

2012-02-10  Rogier Goossens <goossens.rogier@gmail.com>

    Further improve help manual wording
    
    See Bug #667278 - Add support for setting UUID

2012-01-30  Curtis Gedak <gedakc@gmail.com>

    Restructure and word-smith UUID translatable text
    
    Restructure and word-smith translatable text associated with the
    enhancement to add ability for setting UUID in an effort to better
    align with the Gnome Documentation Style Guide.
    
    See Bug #667278 - Add support for setting UUID

2012-01-30  Rogier Goossens <goossens.rogier@gmail.com>

    Implement changing UUID for NTFS (#667278)
    
    Part 4 of 4 to provide new UUID support for NTFS.
    
    Closes Bug #667278 - Add support for setting UUID

2012-01-27  Rogier Goossens <goossens.rogier@gmail.com>

    Use custom text functions for mount/unmount and swapon/swapoff texts
    
    Part 3 of 4 to provide new UUID support for NTFS.
    
    See Bug #667278 - Add support for setting UUID

2012-01-27  Rogier Goossens <goossens.rogier@gmail.com>

    Add support for custom text strings depending on the filesystem
    
    Part 2 of 4 to provide new UUID support for NTFS.
    
    See Bug #667278 - Add support for setting UUID

2012-01-27  Rogier Goossens <goossens.rogier@gmail.com>

    Make FileSystem objects in GParted_Core accessible and usable by others
    
    Part 1 of 4 to provide new UUID support for NTFS.
    
    See Bug #667278 - Add support for setting UUID

2012-02-09  Mario Blättermann <mario.blaettermann@gmail.com>

    [l10n] Updated German doc translation

2012-02-09  Mario Blättermann <mario.blaettermann@gmail.com>

    [l10n] Updated German translation

2012-02-07  Rogier Goossens <goossens.rogier@gmail.com>

    Check LVM cache only for LVM physical volumes
    
    Determine the FS type before checking whether a FS is busy,
    and check LVM only for LVM PVs.
    
    Remove the LVM busy check for extended partitions, as they
    don't contain LVM PVs - or any other FS for that matter.
    (and even if they did, the rest of the code silently assumes
    they don't...)

2012-02-06  Rogier Goossens <goossens.rogier@gmail.com>

    README file: dmsetup is not required for lvm

2012-02-05  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-02-03  Curtis Gedak <gedakc@gmail.com>

    Place file system types in alphabetical order

2012-02-03  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-02-03  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for the work done by Mike Fleetwood to add initial
    support for Logical Volume Management Physical Volumes (LVM PVs).

2012-02-03  Curtis Gedak <gedakc@gmail.com>

    Add comment to Utils::tokenize method

2012-02-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Switch to using lvs to identify active LVM LVs (#160787)
    
    Previously used "dmsetup info" to directly list device-mapper mapping
    names in the kernel to identify active Logical Volumes.  However GParted
    failed to recognise active LVs if the VGNAME contains any hyphens (-).
    This is because LVM encodes hyphens as double hyphens in the mapping
    name.
    
    To avoid having to duplicate the LVM hyphen encoding in GParted, switch
    to using "lvm lvs" to list LVs.
    
        # dmsetup info --columns --noheadings --separator , -o name
        GParted_VG1-lvol_00
        GParted--VG2-lvol--00
    
        # lvm lvs --noheadings --separator , -o lv_name,vg_name,lv_attr
          lvol_00,GParted_VG1,-wi-a-
          lvol-00,GParted-VG2,-wi-a-
          lvol-01,GParted-VG3,-wi---
                                 .^.
    (-) not active, (a) or any other character considered active.  Reference
    lvs(8).
    
    Bug #160787 - lvm support

2012-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Show LVM2 PVs as supported, read-only (#160787)
    
    Add LVM2 PV into the File System Support dialog list and remove the
    warning message reporting LVM as not being supported.
    
    Bug #160787 - lvm support

2012-01-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display busy status of LVM2 PVs (#160787)
    
    A Volume Group is active when any of its Logical Volume mappings are
    loaded (and enabled) in the Kernel's device-mapper driver.  Therefore
    all the Physical Volumes in the VG (must be considered) active too.
    This is exactly equivalent to a mounted file system, as the kernel is
    actively using the partition.  Mark active LVM2 PVs as busy in GParted.
    
    Don't use statvfs() for determining sector usage of busy LVM2 PVs as it
    will fail with "statvfs(VGNAME): No such file or directory".  Instead
    always use the LVM2 PV specific method.
    
    Display the status of the LVM2 PV in the Information dialog using one of
    the following relevant messages:
        Not active (Not part of any volume group)
        VGNAME not active
        VGNAME active
    (The code uses the VGNAME stored in the partition's first mount point,
    as displayed in the "Mount Point" column, rather than going back to the
    primary source of the information in the LVM2_PV_Info class).
    
    Temporarily prevent GParted from offering to unmount LVM2 PVs until
    activating and deactivating Volume Groups is implemented later.
    
    Bug #160787 - lvm support

2011-12-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Display LVM2 VGNAME as the PV's mount point (#160787)
    
    As the Mount Point column is being borrowed to display the PV's VGNAME,
    also suppress generation of the "Mount on" submenu for LVM2 PVs.
    
    Bug #160787 - lvm support

2011-12-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Lazy initialize the cache from querying LVM2 PVs (#160787)
    
    Previously when GParted was started LVM2_PV_Info cache was loaded twice,
    executing LVM2 PV querying commands twice.  Firstly when
    lvm2_pv::get_filesystem_support() was checking if LVM2 PV support was
    available, and secondly when forced by a refresh in
    GParted_Core::set_devices().
    
    Implement lazy initialization.  Only load the cache when forced by the
    above mentioned refresh or having to return a value when the cache is
    not yet loaded.  Do not initialize the cache when just checking if LVM2
    PV support is available.
    
    Bug #160787 - lvm support

2012-01-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Cache results from querying all LVM2 PVs (#160787)
    
    Cache results from querying all LVM2 PVs in one go to minimise the
    number of times lvm commands are executed.  Take inspiration from
    caching performed by FS_Info and Proc_Partitions_Info.
    
    Bug #160787 - lvm support

2011-11-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Allow unused space in a partition to equal its size
    
    Newly created LVM2 PVs, before being added to a Volume Group, report
    free space equal to the partition size.  Allow free space to equal
    partition size.
    
        # parted /dev/sda10 unit B print
        Error: /dev/sda10: unrecognised disk label
        Model: Unknown (unknown)
        Disk /dev/sda10: 2147483648B
        Sector size (logical/physical): 512B/512B
        Partition Table: unknown
        # lvm pvcreate /dev/sda10
          Writing physical volume data to disk "/dev/sda10"
          Physical volume "/dev/sda10" successfully created
        # lvm pvs --units b -o pv_free /dev/sda10
          PFree
          2147483648B

2011-11-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report space usage of LVM2 PVs (#160787)
    
    Add minimal support for just reporting the space usage of LVM2 PVs.
    Accept libparted / blkid detection of LVM2 PVs first, falling back on
    GParted's specific detection code otherwise.  Maintain LVM not supported
    warning message.
    
    Bug #160787 - lvm support

2012-01-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename FS_LVM2 -> FS_LVM2_PV (#160787)
    
    This is the first step of adding support for just LVM2 Phyiscal Volumes,
    a subset of full LVM2 support.
    
    Make it clear that it is only LVM2 PVs being treated like a file system.
    
    Bug #160787 - lvm support

2012-01-29  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-01-28  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-01-27  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-01-26  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-01-25  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2012-01-25  Curtis Gedak <gedakc@gmail.com>

    Increase FAT32 minimum size to 33 MiB (#668491)
    
    Closes Bug #668491 - Formatting small FAT32 partitions (32MB)
                         violates FAT32 specifications

2012-01-25  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-01-24  Curtis Gedak <gedakc@gmail.com>

    Avoid warning display when moving start of extended partition
    
    Moving the start sector of an extended partition should not adversely
    affect booting an operating system because an extended partition is
    only a container for logical partitions.

2012-01-24  Kjartan Maraas <kmaraas@gnome.org>

    Updated Norwegian bokmål translation

2012-01-23  Rogier Goossens <goossens.rogier@gmail.com>

    Fix detection of multiple SW RAID (md) devices (#668486)
    
    Closes Bug #668486 - GParted fails to detect multiple md (SWRaid)
                         devices

2012-01-23  Curtis Gedak <gedakc@gmail.com>

    Enhance documentation for UUIDs and copying partitions (#608308)
    
    Closes Bug #608308 - fix documentation - Copying and Pasting a
                                             Partition

2012-01-22  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for the work done by Rogier Goossens to add support
    for changing file system UUIDs.

2012-01-22  Rogier Goossens <goossens.rogier@gmail.com>

    Add support for setting UUID (#667278)
    
    Add the ability to set a new random UUID on file systems that provide
    the appropriate tools to perform this action.
    
    Update the help manual to include this new functionality.  Also add
    reference links to "setting a partition label" and "changing a
    partition UUID" in the "copying and pasting a partition" section.
    
    This patch does not include setting the UUID on an NTFS file system.
    
    Bug #667278 - Add support for setting UUID
    
    Bug #608308 - fix documentation - Copying and Pasting a Partition

2012-01-20  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2012-01-19  Praveen Illa <mail2ipn@gmail.com>

    Added Telugu Translation

2012-01-19  Praveen Illa <mail2ipn@gmail.com>

    Updated Telugu Translation

2012-01-16  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-01-13  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-01-12  Curtis Gedak <gedakc@gmail.com>

    Fix mismatched field precision type compiler warning
    
    Inserted cast to int so that third parameter matches expected
    parameter precision type.
    
    Original warning:
    
    FileSystem.cc: In member function ‘Glib::ustring
    GParted::FileSystem::mk_temp_dir(const Glib::ustring&,
    GParted::OperationDetail&)’:
    FileSystem.cc:81:69: warning: field precision should have type ‘int’,
    but argument 3 has type ‘long unsigned int’

2011-09-26  Curtis Gedak <gedakc@gmail.com>

    Fix en_CA parameter translation error
    
    The missing percent sign would cause the parameter substitution to be
    incorrect.

2012-01-09  Curtis Gedak <gedakc@gmail.com>

    Reduce graphic processing requirement for pulse bar
    
    Increase sleep time to decrease pulse bar update frequency.
    
    Debian Bug 499193 - gparted: 100% cpu usage
    
    Debian Bug 519764 - gparted: Lots of animation makes use over SSH
                        X-tunnel slow

2012-01-11  Curtis Gedak <gedakc@gmail.com>

    Add files for translation to POTFILES.in
    
    The file src/FileSystem.cc now contains translatable text.  Also
    added src/nilfs2.cc to handle any future translatable text.

2011-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update xfs resize and copy to use new helper functions
    
    Also update xfs file system support detection to allow growing even when
    the xfs kernel module is not already loaded.

2011-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update btrfs resize to use new helper functions
    
    Also update btrfs file system support detection to require kernel
    support before allowing resizing.

2011-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update jfs resize to use new helper functions
    
    Also update jfs file system support detection to allow growing even when
    the jfs kernel module is not already loaded.

2011-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add resize support to nilfs2 (#642842)
    
    Resizing requires nilfs-utils 2.1 or higher and Linux 3.0 or higher.
    
    Closes Bug #642842 - nilfs is not detected

2011-12-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add helper functions for mounted file system resizing operations
    
    There is a lot of commonality and code repetition for resizing of file
    systems which can only be resized while mounted.  Resizing of btrfs, jfs
    and xfs all follow the pattern: mkdir, mount, resize, umount and rmdir.
    Copying an xfs file system also uses a similar pattern, but for the
    source and destination xfs file systems simultaneously.
    
    Add three helper functions to the FileSystem class which implement
    common tasks, allowing mounted file system resizing to be implemented
    more simply.
    
    Also add a function to the Utils class which checks whether the kernel
    supports a file system.  It handles the case of non-loaded modules,
    which currently leads to reporting the growing of jfs and xfs as
    unsupported.

2012-01-11  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2012-01-11  Jiro Matsuzawa <jmatsuzawa@src.gnome.org>

    Updated Japanese translation

2012-01-11  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2012-01-09  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2012-01-08  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for work done by Phillip Susi to display pop-up
    dialog on libparted exceptions

2012-01-04  Phillip Susi <psusi@cfl.rr.com>

    Display pop up dialog on libparted exceptions
    
    We used to just log libparted exceptions without handling them.  This patch
    changes the exception handler to display a modal dialog box and return the
    chosen action to libparted.

2012-01-06  Vincent Untz <vuntz@gnome.org>

    build: Correctly link to gthread
    
    https://bugzilla.gnome.org/show_bug.cgi?id=667412

2012-01-06  Curtis Gedak <gedakc@gmail.com>

    Fix long scan problem when BIOS floppy setting incorrect
    
    The call to "blkid -c /dev/null" on Precise Pangolin Alpha 1 takes
    exceedingly long.  This occurs when the BIOS is incorrectly set to
    indicate a floppy drive is present when none is physically installed.
    Use cached blkid results instead.
    
    Ubuntu launchpad 910379 - Gparted does not start and continues to
                              scan devices
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/910379

2011-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix uninitialised read in OperationDetail::set_status()
    
    Setting the status and controlling the timing of operation details
    initialised with OperationDetail(desc, status, font) uses a conditional
    branch depending on the uninitialised variable this->status.
    
    valgrind:
    ==28957== Conditional jump or move depends on uninitialised value(s)
    ==28957==    at 0x80E4287:
    GParted::OperationDetail::set_status(GParted::OperationDetailStatus)
    (OperationDetail.cc:77)
    
    OperationalDetail.cc:
       75  void OperationDetail::set_status( OperationDetailStatus status )
       76  {
    >> 77          if ( this ->status != STATUS_ERROR )
       78          {
       79                  switch ( status )
       80                  {

2012-01-02  Joe Hansen <joedalton2@yahoo.dk>

    Updated Danish translation

2011-12-16  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for the work done by Mike Fleetwood to add support for
    the nilfs2 file system.

2011-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add nilfs2 support (#642842)
    
    Requires libparted 2.4 or higher, or blkid from utils-linux 2.20 or
    higher for nilfs2 file system detection.
    
    Requires nilfs-utils for nilfs2 file system support.
    
    Closes Bug #642842 - nilfs is not detected

2011-12-13  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2011-12-13  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.11.0   ==========

2011-12-13  Joe Hansen <joedalton2@yahoo.dk>

    Updated Danish translation

2011-12-12  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2011-12-11  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2011-12-07  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2011-12-07  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2011-11-19  Andrey Germanov <andrey@it-port.ru>

    Added Russian translation for help

2011-11-13  Curtis Gedak <gedakc@gmail.com>

    Avoid redundant file system maximize actions (#663980)
    
    When GParted performed operations or combinations of operations,
    such as:
      a)  copy to same or smaller size destination partition
      b)  move to same or smaller size due to alignment change
      c)  resize to smaller size
    a redundant maximize file system operation would occur.
    
    Normally these redundant maximize operations to grow the file
    system to take up all the space in the partition were not harmful.
    
    However in situations where libparted failed to inform the kernel
    of partition changes, then the extra maximize operation would
    grow the file system to be the original partition size.  In cases
    where the original partition was larger than the new partition
    size, this caused problems because the file system would be
    larger than the partition on reboot.
    
    This enhancement avoids redundant file system maximize actions on
    copy, move, and resize, and should help reduce problems described
    in the following links:
    
    WARNING! Problem Resizing File Systems with GParted
    http://gparted-forum.surf4.info/viewtopic.php?id=13777
    
    Bug #601574 - ERROR: Current NTFS volume size is bigger than the
                  device size!
    
    Bug #604298 - Problems resizing file systems with
                  gparted-live-0.5.0-3
    
    Closes Bug #663980 - Avoid redundant file system maximize actions
                         on copy, move, and resize

2011-11-13  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add missed recognition of linux-swap labelling for Mike Fleetwood,
    and fix indentation.

2011-11-13  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for the work done by Stephen Kirkby to reverse umount
    order in xfs::copy.

2011-11-13  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for the work done by Mike Fleetwood to improve btrfs
    labelling and new btrfs multi-tool command use.

2011-11-11  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Use newer btrfs multi-tool control command first
    
    Btrfsctl and btrfs-show were depreciated in October 2011 and have been
    superseeded by the newer btrfs multi-tool control command.  Use btrfs as
    first choice, falling back to btrfsctl and btrfs-show when not found.

2011-11-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add labelling of btrfs file systems
    
    Use "btrfs filesystem label" command to set the label of unmounted
    btrfs file systems.

2011-11-13  Stephen Kirkby <mail@stephenkirkby.co.uk>

    Reverse umounting order in xfs::copy
    
    See bug #663806 - Cannot copy XFS filesystem to new smaller
                      partition anymore

2011-11-12  Curtis Gedak <gedakc@gmail.com>

    Add to README packages required for fedora 16 build
    
    Also add configure flag to disable scrollkeeper for desktops that do
    not support scrollkeeper.

2011-11-11  Curtis Gedak <gedakc@gmail.com>

    Enable copy to smaller XFS partition (#663806)
    
    Closes Bug #663806 - Cannot copy XFS filesystem to new smaller
                         partition anymore

2011-11-10  Curtis Gedak <gedakc@gmail.com>

    Add xfsdump package requirement to copy xfs file systems

2011-11-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix btrfs volume label reading
    
    There are still 2 issues with reading btrfs labels when falling back
    on using btrfs-show command, rather than primary method of using the
    blkid command:
    
    1)  Label is set no "none" when btrfs-show is reporting there is no
        label, although it is impossible to distinguish from the case of the
        label actually being set to "none".
    
    2)  The label has 2 trailing spaces appended as the regular expression
        matches "Label: (btrfslabel  )uuid:" rather than
        "Label: (btrfslabel)  uuid:" in the btrfs-show output.
    
    Assume a label "none" means there is no label and fix the regular
    expression.

2011-11-02  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Improve code comments for reading volume labels

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Enhance regexp_label method to handle unicode characters
    
    Prompted by Bug #662537 - Ext4 unicode labels not shown correctly

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Display ntfs unicode volume labels properly
    
    Prompted by Bug #662537 - Ext4 unicode labels not shown correctly

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Display ext2/3/4 unicode volume labels properly (#662537)
    
    Note that this enhancement changes GParted to first try the native
    tools to determine the volume label for all file systems.  If the
    volume label is not found then the fall back method is to use blkid.
    
    There is a small degradation in device refresh times as a result of
    this change.
    
    Closes Bug #662537 - Ext4 unicode labels not shown correctly

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Repair broken volume label regular expression pattern
    
    Also adjust indentation.

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    Fix release date - s/b Nov. 1, 2011

2011-11-01  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.10.0   ==========

2011-10-31  Bruce Cowan <bruce@bcowan.me.uk>

    Updated British English translation

2011-10-31  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2011-10-31  Djavan Fagundes <djavanf@gnome.org>

    Updated Brazilian Portuguese translation

2011-10-30  Alexander Shopov <ash@kambanaria.org>

    Updated Bulgarian translation

2011-10-28  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2011-10-26  Antonio Fernandes C. Neto <fernandesn@gnome.org>

    Updated Brazilian Portuguese translation

2011-10-25  Curtis Gedak <gedakc@gmail.com>

    Handle additional return codes from btrfsctl resizing
    
    Sometimes btrfsctl returns 256 on successful resize, not just 0.

2011-10-25  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2011-10-25  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2011-10-24  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2011-10-24  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2011-10-24  Muhammet Kara <muhammet.k@gmail.com>

    Updated Turkish translation

2011-10-24  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2011-10-24  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2011-10-24  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-10-23  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2011-10-22  Curtis Gedak <gedakc@gmail.com>

    Add missing exfat file system to set_proper_filesystem method
    
    This should have been part of commit
    7cbc125a2e9d26999c18f7a1539d96ed61a81f5c

2011-10-22  Curtis Gedak <gedakc@gmail.com>

    Add missing file systems to POTFILES.in
    
    Specifically btrfs, ext4, and ufs.

2011-10-22  Curtis Gedak <gedakc@gmail.com>

    Add detection of exfat file systems (#639760)
    
    Note that util-linux v2.18 or higher is required to detect exfat file
    systems.
    
    Part of Bug #639760 - exfat / fat64 support

2011-10-22  Curtis Gedak <gedakc@gmail.com>

    Cleanup btrfs code
    
    Move btrfs higher up the file system list.
    Remove btrfs skip references as btrfs is now supported.

2011-10-18  Curtis Gedak <gedakc@gmail.com>

    Add ability to resize btrfs file systems (#661715)
    
    Closes Bug #661715 - use btrfs-tools ability to resize btrfs
                         partitions

2011-10-18  Curtis Gedak <gedakc@gmail.com>

    Fix innocuous bug
    
    Fix bug introduced in GParted 0.9.0 in commit
    4a8fef98225c513cad9d38f32303c67d1ceed4b8 to address ISO C++ ambiguity
    compiler warning.
    
    Due to the nature of the surrounding code, this bug was not evident
    in the log file output.
    
    Thanks to Magnus Fromreide for finding this bug.

2011-10-13  Jérôme Dumesnil <jerome.dumesnil@gmail.com>

    Improve Merge_Operations method parameters and checks

2011-10-09  Algimantas Margevičius <gymka@mail.ru>

    Updated Lithuanian translation

2011-10-05  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file
    
    Add recognition for the work done by Jérôme Dumesnil to merge
    operations as per bug #438573.

2011-10-05  Jérôme Dumesnil <jerome.dumesnil@gmail.com>

    Merge overlapping operations (#438573)
    
    When a new operation is added to operations list, check if a merge
    is possible depending on the operation type:
    
        OPERATION_RESIZE_MOVE:  2 consecutive "resize" operations on the
                                same  partition
    OPERATION_LABEL_PARTITION:  2 "label change" operations (need not be
                                consecutive) on the same partition
              OPERATION_CHECK:  2 "check" operations (need not be
                                consecutive) on the same partition
             OPERATION_FORMAT:  2 consecutive "format" operations on the
                                same partition
    
    Closes Bug #438573 - Cancel out overlapping actions
    
    Also fix a bug when copying partition using the Partition::Set(...)
    method.  This method did not initialize "sectors_used" and
    "sectors_unused" members.

2011-10-03  Rudolfs Mazurs <rudolfs.mazurs@gmail.com>

    Updated Latvian translation.

2011-09-26  Curtis Gedak <gedakc@gmail.com>

    Remove README.compose because String::compose is not used in GParted
    
    String::ucompose is used (note the added "u").

2011-09-26  Curtis Gedak <gedakc@gmail.com>

    Update String::ucompose library to version 1.0.5

2011-09-25  Fran Dieguez <fran@openhost.es>

    Updated Galician translations

2011-09-20  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2011-09-19  Curtis Gedak <gedakc@gmail.com>

    Fix typo in person's name

2011-09-19  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2011-09-19  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.9.1   ==========

2011-09-19  Kenneth Nielsen <k.nielsen81@gmail.com>

    Updated Danish translation

2011-09-19  Rudolfs Mazurs <rudolfs.mazurs@gmail.com>

    Updated Latvian translation.

2011-09-19  Muhammet Kara <muhammet.k@gmail.com>

    Updated Turkish translation

2011-09-19  Kenneth Nielsen <k.nielsen81@gmail.com>

    Updated Danish translation

2011-09-19  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2011-09-19  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2011-09-17  Abdalrahim G. Fakhouri <abdilra7eem@yahoo.com>

    Updated Arabic translation

2011-09-16  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2011-09-16  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2011-09-15  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2011-09-13  Curtis Gedak <gedakc@gmail.com>

    Fix NTFS resize operation fails (#655215)
    
    Due to a change in error handling behaviour in ntfsresize version
    2.011.4.12AR.4 (libntfs-3g) GParted would fail to properly resize ntfs
    file systems if the file system was marked for consistency check.
    
    The current maintainer of ntfsprogs provided the following advice:
    
         "Well, though I am reverting back to the old behavior, you should
         add -ff instead of relying on an unspecified behavior when
         ntfsresize gets an error when trying to read the reply. I suppose
         you do not connect the stdin of ntfsresize, hence the error. With
         -ff no question is asked (I stress : even with the old
         ntfsresize)."
    
    Hence I have added a second "--force" option to the ntfsresize command
    for resizing NTFS file systems.
    
    Closes Bug #655215 - NTFS partition resize fails

2011-09-08  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-09-07  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2011-09-06  Tiffany Antopolski <tiffany@antopolski.com>

    Updated Canadian English translation.

2011-09-01  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-09-01  Alexandre Franke <alexandre.franke@gmail.com>

    Update French translation

2011-09-01  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2011-08-31  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2011-08-30  Tiffany Antopolski <tiffany@antopolski.com>

    Dialog_Rescue_Data.cc: fixed type, director --> directory
    
    This fixes bug# 657744

2011-08-31  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2011-08-30  Tiffany Antopolski <tiffany@antopolski.com>

    en_CA.po: corrected incorrect unit translations.
    
    This patch fixes bug# 610421

2011-08-29  Fran Dieguez <fran@openhost.es>

    Updated galician translations

2011-08-21  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2011-07-31  Bruno Brouard <annoa.b@gmail.com>

    Updated French translation

2011-07-30  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2011-07-25  André Gondim <andregondim@ubuntu.com>

    Updated Brazilian Portuguese translation

2011-07-21  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-07-20  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-07-20  Pavol Klačanský <pavol@klacansky.com>

    Updated Slovak translation

2011-07-19  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2011-07-19  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2011-07-16  Curtis Gedak <gedakc@gmail.com>

    Fix ISO C++ ambiguity compiler warning
    
    Enhance code to pass compiler warning.  Prior to this change the
    compiler would complain with the following message:
    
    error: ISO C++ says that these are ambiguous, even though the worst
    conversion for the first is better than the worst conversion for the
    second: /usr/include/c++/4.5/bits/postypes.h:192:7: note: candidate 1:
    std::fpos<_StateT> std::fpos<_StateT>::operator-(std::streamoff) const
    [with _StateT = __mbstate_t, std::fpos<_StateT> =
    std::fpos<__mbstate_t>, std::streamoff = long int] Utils.cc:443:27:
    note: candidate 2: operator-(std::streamoff, long long int) <built-in>

2011-07-16  Curtis Gedak <gedakc@gmail.com>

    Fix ignoring return value compiler warnings
    
    Add code to handle situation where realpath might return a NULL value.
    Prior to this change the compiler would complain with the following
    message:
    
    error: ignoring return value of ‘char* realpath(const char*, char*)’,
    declared with attribute warn_unused_result

2011-07-16  Curtis Gedak <gedakc@gmail.com>

    Fix expression always true compiler warning
    
    Removed expression that is always true.  Prior to this change the
    compiler would complain with the following message:
    
    error: comparison of unsigned expression >= 0 is always true

2011-07-16  Curtis Gedak <gedakc@gmail.com>

    Fix unused parameter compiler warning
    
    Removed unused parameter.  Prior to this change the compiler would
    complain with the following message:
    
    error: unused parameter ‘cylinder_size’

2011-07-16  Curtis Gedak <gedakc@gmail.com>

    Fix ignoring return value compiler warning
    
    Add code to handle situation where mkdtemp(char*) function returns
    with a NULL value.  Prior to this code the compiler would complain
    with the following message:
    
    error: ignoring return value of ‘char* mkdtemp(char*)’, declared with
    attribute warn_unused_result

2011-07-14  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file and minor variable rename
    
    Add recognition for the work done by Markus Elfring.
    Also minor variable rename and added comment for patch to bug #634090.

2011-06-26  Markus Elfring <elfring@users.sourceforge.net>

    Bug #634090: Change some attributes to local variables
    
    Some classes contained private attributes which were used only by a single
    member function. Such items were moved to the corresponding function implementations
    to stress their limited usage scope.
    
    A few unused variables were also deleted.
    
    Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>

2011-07-18  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2011-07-18  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.9.0   ==========

2011-07-18  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2011-07-16  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation.

2011-07-15  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2011-07-15  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2011-07-14  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2011-07-14  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2011-07-08  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2011-07-06  Muhammet Kara <muhammet.k@gmail.com>

    Updated Turkish translation

2011-07-06  Şenol Korkmaz <mail@senolkorkmaz.info>

    Updated Turkish translation

2011-06-13  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2011-06-12  Arash Mousavi <amousavi@src.gnome.org>

    Updated Persian Translation

2011-06-09  Curtis Gedak <gedakc@gmail.com>

    Enable compile and link with libparted 3.0 (#651559)
    
    The release of (lib)parted 3.0 includes a change to the Application
    Programing Interface - API.  Most importantly, libparted 3.0 removes
    many file system specific function calls, and hence the capabilities
    provided by these functions.  In order for GParted to compile and link
    with libparted 3.0, this libparted functionality is lost.
    
    Specifically, the functionality that is lost when GParted is compiled
    and linked with libparted 3.0 is as follows:
    
      - Loss of ability to grow and shrink FAT16 and FAT32 file systems
      - Loss of ability to shrink HFS and HFS+ file systems
      - Loss of ability to determine used and unused sectors in HFS and
          HFS+ file systems
      - Loss of ability to erase file system signatures on partition
          create and format
    
    It is hoped that other free software projects will include some or all
    of the above lost functionality, which can then be added back to
    GParted.
    
    This commit includes a change in how FAT16 and FAT32 file systems are
    moved.  Specifically the move is now performed internally by GParted
    when linked with libparted 3.0.  The move functionality is provided by
    libparted for prior libparted versions (e.g. less than 3.0).
    
    This is the final enhancement in a series of commits that enable
    GParted to compile with libparted version 3.0.
    
    Closes Bug #651559 - Doesn't compile against parted 3.0

2011-06-08  Curtis Gedak <gedakc@gmail.com>

    Add configure check for libparted version 3.0.0 or higher
    
    This enhancement is in preparation for addressing the following bug
    report:
    Bug #651559 - Doesn't compile against parted 3.0

2011-06-07  Curtis Gedak <gedakc@gmail.com>

    Minor format changes to final configuration summary

2011-06-04  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2011-06-03  Gil Forcada <gforcada@gnome.org>

    [l10n]Updated Catalan translation

2011-05-31  Curtis Gedak <gedakc@gmail.com>

    Add .csettings to .gitignore

2011-05-31  Curtis Gedak <gedakc@gmail.com>

    Fix size off by one sector with unrecognized disk label (#649444)
    
    On disks with an unrecognized disk label, the end sector value
    was saved as one sector larger than actual.  This caused the
    Partition Information dialog to report the end sector value and
    the total number of sectors on the disk as one larger than the
    actual value.
    
    Closes Bug #649444 - Partition information reports wrong sector
                         count

2011-05-29  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2011-05-27  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2011-05-27  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2011-05-26  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2011-05-26  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-05-25  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-05-24  Curtis Gedak <gedakc@gmail.com>

    Improve English grammar: amount -> number (#650237)
    
    Closes Bug #650237 - Grammar error: amount -> number

2011-05-22  Gabor Kelemen <kelemeng@gnome.hu>

    Typo: "on on" -> on

2011-05-23  Curtis Gedak <gedakc@gmail.com>

    Add missed NEWS entry from 0.8.1 release

2011-05-23  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2011-05-23  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.8.1   ==========

2011-05-23  Luana Campos Ferreira <luana@syst.com.br>

    Updated Brazilian Portuguese translation

2011-05-23  krishnababu k <kkrothap@redhat.ocm>

    Added Telugu Translations done by praveen Illa

2011-05-23  krishnababu k <kkrothap@redhat.ocm>

    Added Telugu locale te in LINGUAS

2011-05-23  Daniel Korostil <ted.korostiled@gmail.com>

    Uploaded Ukranian

2011-05-22  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2011-05-22  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2011-05-21  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2011-05-20  Arash Mousavi <amousavi@src.gnome.org>

    Updated Persian Translation

2011-05-20  Arash Mousavi <amousavi@src.gnome.org>

    Added Persian translation

2011-05-18  Alexander Shopov <ash@kambanaria.org>

    Updated Bulgarian translation

2011-05-04  Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>

    Add Esperanto translation

2011-04-22  Vincent Blut <vincent.debian@free.fr>

    Fixed typos in French translation

2011-04-02  Rudolfs Mazurs <rudolfs.mazurs@gmail.com>

    Updated Latvian translation.

2011-03-27  Curtis Gedak <gedakc@gmail.com>

    Add note to AUTHORS file for Seth's contributions

2010-12-17  Seth Heeren <sgheeren@hotmail.com>

    Simplified cleanup_cursor() implementation
    
    I hit this performance bug when I cloneda 40G NTFS partition. The actual
    copy was done in under 11 minutes. After that I was shocked to find that
    gparted would spend over 12 minutes in cleanup_cursor, pegging a CPU
    core. (On a quad core desktop...)
    
    Simply replacing the ustring with std::string would reduce the time to
    about 1.5 minutes. Still bad. Also, I didn't want to lose UTF8
    awareness.
    
    So I rewrote the algorithm in 'streaming mode'. This has the (potential)
    drawback that locale conversions are done, but performs well and
    - IMHO - is a lot more readable.
    
    On a minor note: this implementation correctly handles backspaces at the
    start of a line.

2011-03-25  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2011-03-19  Curtis Gedak <gedakc@gmail.com>

    Remove one level of quoting when spawning commands
    
    Change spawn_command_line_sync to spawn_sync to reduce the level of
    quoting required when passing commands to the function.  Since
    spawn_command_line_sync uses the parent's environment, the replacement
    call also uses the parent's environment.
    
    This change permits unmounting of file systems mounted with an
    apostrophe in the mount point name.
    
    Ubuntu launchpad bug 151796 - Can't unmount partition with apostrophe
                                  in label
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/151796

2011-03-18  Lucian Adrian Grijincu <lucian.grijincu@gmail.com>

    Updated Romanian translation

2011-03-18  Lucian Adrian Grijincu <lucian.grijincu@gmail.com>

    Updated Romanian translation

2011-02-27  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2011-02-27  Curtis Gedak <gedakc@gmail.com>

    Ensure graphical error message displayed when run by non-root user
    
    Ubuntu launchpad bug 696937 - Running gparted as non-root user
                                  displays no graphical error message
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/696937

2011-02-26  Curtis Gedak <gedakc@gmail.com>

    Add openSUSE command to install dependencies to README

2011-02-26  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2011-02-26  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2011-02-22  Curtis Gedak <gedakc@gmail.com>

    Remove all usage of kpartx to avoid partition entry duplicates
    
    Usage of the kpartx package to create partition names has been
    completely removed.  Hence kpartx is no longer even an optionally used
    package by gparted.
    
    This change is related to the following bug report:
    
    Ubuntu launchpad bug 719129 - [Natty] Gparted duplicates dmraid
                                  partition devices
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/719129

2011-02-22  Curtis Gedak <gedakc@gmail.com>

    Add flag --enable-libparted-dmraid to use native libparted dmraid
    
    The new configure option --enable-libparted-dmraid enables the native
    use of /dev/mapper dmraid support in the libparted library.
    
    If this option is not specified, or is disabled, then gparted code
    will be used to support dmraid.  The gparted code uses the old dmraid
    partition naming scheme of always appending the partition number to
    the device name.  The letter 'p' is not inserted between the device
    name and the partition number.  The gparted code is particularly
    useful when used with older versions of libparted that do not support
    /dev/mapper dmraid.
    
    Ubuntu launchpad bug 719129 - [Natty] Gparted duplicates dmraid
                                  partition devices
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/719129

2011-02-19  Hannie Dumoleyn <hannie@ubuntu-nl.org>

    [l10n] Updated Dutch translation

2011-02-19  Curtis Gedak <gedakc@gmail.com>

    Add comment for documentation maximum image width recommendation

2011-02-18  Hannie Dumoleyn <hannie@ubuntu-nl.org>

    [l10n] Updated Dutch translation

2011-02-17  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2011-02-15  Curtis Gedak <gedakc@gmail.com>

    Update NEWS with correct date for 0.8.0 release

2011-02-15  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2011-02-15  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated Romanian translation

2011-02-15  Daniel Șerbănescu <cyber19rider@gmail.com>

    Updated Romanian translation

2011-02-15  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.8.0   ==========

2011-02-14  Claude Paroz <claude@2xlibre.net>

    Updated French translation
    
    Contributed by Claude Paroz and Bruno Brouard

2011-02-13  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2011-02-09  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-02-08  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Added screenshots for Serbian documentation

2011-02-04  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Updated Serbian translation

2011-02-08  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-02-07  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2011-02-06  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-02-05  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2011-02-05  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2011-02-05  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2011-02-05  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German doc translation

2011-02-04  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2011-02-04  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2011-02-03  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2011-02-03  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2011-02-03  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Added Serbian help translation

2011-02-03  Мирослав Николић <miroslavnikolic@rocketmail.com>

    Added Serbian translation

2011-02-03  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2011-01-30  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German translation

2011-01-30  Paulo E Ojeda <pauloeojeda@hotmail.com>

    Updated Spanish translation

2011-01-30  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-01-29  Curtis Gedak <gedakc@gmail.com>

    Update README and AUTHORS for attempt data rescue

2011-01-29  Curtis Gedak <gedakc@gmail.com>

    Add missing copyright year to help manual

2011-01-29  Curtis Gedak <gedakc@gmail.com>

    Add attempt data rescue section to help manual (#171215)
    
    Add documentation for new feature to attempt data rescue for lost
    partitions.
    
    Closes Bug #171215 - Support lost partition recovery

2011-01-28  Joan Lledó <joanlluislledo@gmail.com>

    Added support to lost data recovery using gpart

2011-01-27  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2011-01-26  Bruno Brouard <annoa.b@gmail.com>

    Updated French translation

2011-01-26  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-01-23  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2011-01-21  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2011-01-20  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2011-01-19  Curtis Gedak <gedakc@gmail.com>

    Prevent visual disk display area from disappearing
    
    Added a display refresh to the event queue to address this
    problem.
    
    Previously, the display area of the visual disk seemed to
    disappear when enough operations had been added to the queue so
    that a scrollbar was required (about 4 operations).
    
    If the three lines in HBoxOperations::load_operations method for
    "//make scrollwindow focus on the last operation in the list"
    were commented out then this also prevented the problem from
    occurring.
    
    Interestingly, if I changed the "set_cursor" method to
    a "scroll_to_row" method, then this problem does not occur for an
    additional 2 operations (about 6 operations total).
    
    Ubuntu launchpad bug 583746 - Partition graph disappears after a
                                  swap partition has been deleted
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/583746

2011-01-19  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2011-01-17  Curtis Gedak <gedakc@gmail.com>

    Increase robustness of help manual launch
    
    Add direct invocation of yelp if normal open help manual methods
    fail.

2011-01-16  Marek Černocký <marek@manet.cz>

    Updated Czech translation

2011-01-16  Curtis Gedak <gedakc@gmail.com>

    Add possible cause for failure to read file system

2011-01-16  Curtis Gedak <gedakc@gmail.com>

    Add another reason to list when unable to detect file system

2011-01-16  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2010-11-17  Curtis Gedak <gedakc@gmail.com>

    Change documentation to URL gparted.org and update copyright year

2011-01-15  Curtis Gedak <gedakc@gmail.com>

    Fix minor cylinder alignment rounding error (size < 1 cylinder)
    
    Previously when creating a new partition on a device with 512
    byte sectors with 7 MiB chosen and cylinder alignment, the
    snap_to_cylinder logic would round up to 2 cylinders (~15.69
    MiB), instead of the correct 1 cylinder (~7.84 MiB).

2011-01-15  Curtis Gedak <gedakc@gmail.com>

    Fix paste destination partition smaller than source (#639393)
    
    Re-work logic for copying a cylinder aligned partition to a new
    MiB aligned partition.  Previously this was partially fixed in
    bug #626946 - Destination partition smaller than source partition
    
    Closes Bug #639393 - Redux: Destination partition smaller than
                         source partition

2011-01-04  Yuri Myasoedov <omerta13@yandex.ru>

    Updated Russian translation

2010-12-29  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-12-20  Mattias Põldaru <mahfiaz gmail com>

    [l10n] Updated Estonian translation

2010-12-11  Curtis Gedak <gedakc@gmail.com>

    Minor update to Romanian translation to pass xml validation

2010-12-13  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-12-13  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.7.1   ==========

2010-12-12  Curtis Gedak <gedakc@gmail.com>

    Remove extra blank line from NEWS

2010-12-12  Curtis Gedak <gedakc@gmail.com>

    Update URL in README

2010-12-11  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation

2010-09-06  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2010-12-09  Curtis Gedak <gedakc@gmail.com>

    Enhance to work with mount points defined by uuid or label

2010-12-09  Curtis Gedak <gedakc@gmail.com>

    Add methods to FS_Info class to get path by uuid and by label

2010-12-09  Curtis Gedak <gedakc@gmail.com>

    Handle characters like spaces in mount points (#629592)
    
    Use mntent C library to read mount point files such as
    /etc/fstab, /etc/mtab, and /proc/mounts.
    
    Closes bug #629592 - Unable to find Mount Point if it contains a
                         Space Character

2010-12-08  Curtis Gedak <gedakc@gmail.com>

    Move dmraid device logic outside of for loop
    
    Since this logic did not depend on the for loop variable, it does
    not make sense to have this within the for loop.

2010-12-07  Curtis Gedak <gedakc@gmail.com>

    Refactor device parsing logic into Proc_Partitions_Info class
    
    The reason for refactoring is to simplify the large GParted_Core
    class, to help minimize disk reads, and to group the logic for
    processing the file /proc/partitions into a single logical class.

2010-12-07  Curtis Gedak <gedakc@gmail.com>

    Refactor alternate_paths logic into new Proc_Partitions_Info class
    
    This reason for refactoring is to simplify the large GParted_Core
    class, to help minimize disk reads, and to group the logic for
    processing the file /proc/partitions into a single logical class.

2010-12-03  Lucian Adrian Grijincu <lucian.grijincu@gmail.com>

    Updated Romanian translation

2010-11-11  Curtis Gedak <gedakc@gmail.com>

    Fix incorrect dmraid partition path name (#634553)
    
    Enhance code so that all calls to the ped_partition_get_path
    function in the libparted library go through one
    GParted_Core::get_partition_path method.
    
    This one method makes the appropriate adjustments to the dmraid
    partition path name as required.
    
    Closes bug #634553 - ntfsresize fails on RAID array

2010-11-08  Adrian Guniš <andygun696@gmail.com>

    Updated Czech translation

2010-11-01  Curtis Gedak <gedakc@gmail.com>

    Updated Spanish translation, fixes bug #633492

2010-10-31  Mario Blättermann <mariobl@gnome.org>

    [l10n] Updated German doc translation, Bug #633587

2010-10-30  Carles Ferrando <carles.ferrando@gmail.com>

    Updated Catalan (Valencian) translation

2010-10-30  Inaki Larranaga Murgoitio <dooteo@zundan.com>

    Updated Basque language

2010-10-30  Kjartan Maraas <kmaraas@gnome.org>

    Updated Norwegian bokmål translation.

2010-10-29  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-10-29  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.7.0   ==========

2010-10-29  Curtis Gedak <gedakc@gmail.com>

    Add btrfs-tools package to list in README

2010-10-29  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2010-10-27  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2010-10-27  Alexander Shopov <ash@kambanaria.org>

    Updated Bulgarian translation

2010-10-26  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2010-10-25  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2010-10-25  Curtis Gedak <gedakc@gmail.com>

    Ensure 1 MiB reserved when moving partition to start of disk
    
    The 1 MiB is required for the partition table stored at the
    beginning of the disk device.

2010-10-25  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2010-10-25  Antonio Fernandes C. Neto <fernandes@pelivre.org>

    Updated Brazilian Portuguese translation

2010-10-25  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2010-10-25  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2010-10-25  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2010-10-24  Aurimas Černius <aurisc4@gmail.com>

    Updated Lithuanian translation

2010-10-24  Curtis Gedak <gedakc@gmail.com>

    Fix crash moving more than one logical partition right (#628863)
    
    This problem would occur when using align to MiB for the
    destination partitions.
    
    Closes bug #628863 - gparted crashes applying move to right of
                         more than one logical partition

2010-10-24  Andika Triwidada <andika@gmail.com>

    Updated Indonesian translation

2010-10-23  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2010-10-23  A S Alam <aalam@users.sf.net>

    updating translation for Punjabi

2010-10-22  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-10-22  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2010-10-22  Matej Urbančič <mateju@svn.gnome.org>

    Added sl for Slovenian translation

2010-10-22  Matej Urbančič <mateju@svn.gnome.org>

    Added Slovenian translation

2010-10-20  Curtis Gedak <gedakc@gmail.com>

    Change URL for "Saving Details" to a shorter path
    
    This new URL is actually an html redirect to the actual page
    location.  This permits us the flexibility to move the actual
    page wherever is needed on the web site without the need to
    change the URL location in the code.

2010-10-20  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-10-19  Curtis Gedak <gedakc@gmail.com>

    Skip move action because linux-swap contains no data (#589555)
    
    Closes bug #589555 - Moving a swap partition needlessly copies
                         all "data" on it

2010-10-19  Curtis Gedak <gedakc@gmail.com>

    Add virtual move method to FileSystem class
    
    This is preparation work for the following bug report:
    Bug #589555 - Moving a swap partition needlessly copies
                  all "data" on it

2010-10-19  Curtis Gedak <gedakc@gmail.com>

    Skip copy action because linux-swap does not contain data
    
    This change is related to the following bug report:
    Bug #589555 - Moving a swap partition needlessly copies
                  all "data" on it

2010-10-18  Curtis Gedak <gedakc@gmail.com>

    Fix partitions moved or copied using MiB alignment are 1 MiB larger
    
    Correct problem introduced in version 0.6.3 whereby move or copy
    operations using MiB alignment resulted in the destination
    partition being 1 MiB larger.
    
    Closes bug #632478

2010-10-18  Curtis Gedak <gedakc@gmail.com>

    Make btrfs support a normal part of gparted
    
    Remove need to configure with the --enable-btrfs option in order
    to include btrfs support in gparted.

2010-10-17  Mattias Põldaru <mahfiaz gmail com>

    [l10n] Updated Estonian translation

2010-10-16  Kjartan Maraas <kmaraas@gnome.org>

    Updated Norwegian bokmål translation

2010-10-15  Curtis Gedak <gedakc@gmail.com>

    Add more translator comments requested in bug #631684

2010-10-15  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-10-14  Mario Blättermann <mariobl@gnome.org>

    [i18n] Updated German translation

2010-10-14  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-10-13  Curtis Gedak <gedakc@gmail.com>

    Rearrange text for warning when moving a partition

2010-10-13  Curtis Gedak <gedakc@gmail.com>

    Update to support plural forms for string for translators
    
    Closes bug #631684 - Needed Translator Comments

2010-10-13  Aron Xu <aronxu@gnome.org>

    Update Simplified Chinese translations, some strings are synced from ubuntu-l10n-zh-cn team by Yunqiang Su.
    
    Signed-off-by: Aron Xu <aronxu@gnome.org>

2010-10-13  Maxim V. Dziumanenko <dziumanenko@gmail.com>

    Updated Ukrainian translation

2010-10-12  Curtis Gedak <gedakc@gmail.com>

    Add translator comments requested in bug #631684

2010-10-12  Curtis Gedak <gedakc@gmail.com>

    Update URLs to new official web site gparted.org

2010-06-24  Markus Elfring <elfring@users.sourceforge.net>

    Bug #539092: Deletion of unnecessary null pointer checks
    
    A few null pointer checks were deleted because they were not needed any more.
    
    Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>

2010-10-05  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    erase_filesystem_signatures writes uninitialized data
    
    tagged FIXME

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    leaked FS structures for unsupported partition types
    
    FILESYSTEMS vector copies anyway

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    leaked regular expression (regfree not called)

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    Unitialized value in OperationDetail::OperationDetail

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    ped_partition_get_path result not freed

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    leaked FS structures for new partition dialog
    
    FILESYSTEMS vector copies anyway

2010-10-03  Seth Heeren <sgheeren@hotmail.com>

    leaked Gtk::HBox

2010-10-05  Seth Heeren <sgheeren@hotmail.com>

    remove misuse of ustring in get_filesystem

2010-10-05  Luca Bruno <lucab@debian.org>

    Use ext2 as default when creating new filesystems
    
    Default to ext2 for filesystem creation, instead of the
    alphabetically preceding btrfs. Do not use get_label(),
    as it is not available in older gtkmm.

2010-10-03  Luca Bruno <lucab@debian.org>

    Provide set_used_sectors() for Btrfs
    
    Add set_used_sectors() method to Btrfs handler, to show usage statistics
    on unmounted volumes.

2010-01-04  Luca Bruno <lucab@debian.org>

    List Btrfs capabilities in filesystems table
    
    When enabled, show Btrfs capabilities in features table, without skipping
    it like other multi-volume systems.

2010-01-02  Luca Bruno <lucab@debian.org>

    Use Btrfs handlers, if enabled at configure time
    
    GParted already has basic support only to recognize Btrfs volumes; if
    configured, use our newer methods to handle them.
    Also, put in place interface controls for all supported generic actions.

2010-01-02  Luca Bruno <lucab@debian.org>

    Initial Btrfs-handling modules
    
    This adds initial handlers for Btrfs; only .create, .check and
    .read_label are done for now, via external btrfs-tools.
    Other methods are still only stubs.

2010-01-02  Luca Bruno <lucab@debian.org>

    Add --enable-btrfs to ./configure for experimental Btrfs support
    
    This will take care of setting BTRFS_SUPPORT in config.h, included
    all around the sources to conditionally enable Btrfs capability.

2010-10-01  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-10-01  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.6.4   ==========

2010-09-30  Curtis Gedak <gedakc@gmail.com>

    Fix partitions created using MiB alignment are 1 MiB larger (#631026)
    
    Closes bug #631026 - Partitions created using MiB alignment are
                         1 MiB larger than specified

2010-09-23  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-09-23  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.6.3   ==========

2010-09-23  Dirgita <dirgitadevina@yahoo.co.id>

    Initial Indonesian translation
    Added id to LINGUAS

2010-09-23  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation, missed few strings

2010-09-23  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation

2010-09-21  Curtis Gedak <gedakc@gmail.com>

    Use direct assignment for string in class initialization
    
    Change string initialization to use direct assignment instead of
    a class method in the GParted_Core class initialization.
    
    Thanks go to Jan Claeys for pointing out this potential problem
    and providing the following link:
    https://bugzilla.gnome.org/show_bug.cgi?id=627724#c7
    
    This link contains a comment by Matthias Clasen that says:
    
        "In a class init function, don't do anything that causes
        other threads to initialize classed types."

2010-09-21  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2010-09-19  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2010-09-19  Mattias Põldaru <mahfiaz gmail com>

    [l10n] Updated Estonian translation

2010-09-18  Adrian Guniš <andygun696@gmail.com>

    Updated Czech translation

2010-09-16  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2010-09-16  Mario Blättermann <mariobl@gnome.org>

    [i18n] Updated German translation

2010-09-14  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2010-09-13  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2010-09-13  Carlos José Pereira <carlao2005@gmail.com>

    Updated Brazilian Portuguese translation

2010-06-24  Markus Elfring <elfring@users.sourceforge.net>

    Bug #622598: Complete quoting for macro parameters
    
    Some square brackets were added to be more explicit where macro expansion
    will not be required.
    http://autogen.sourceforge.net/acquoting.html
    http://www.gnu.org/software/autoconf/manual/m4/Quoting-Arguments.html
    
    Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>

2010-09-09  Curtis Gedak <gedakc@gmail.com>

    Fix size reduced by 1 MiB when created after cylinder aligned partition
    
    Prior to this enhancement creating a new partition aligned to MiB
    after a partition aligned to cylinder would result in the creation of
    a partition that was 1 MiB smaller in size than requested.  In the
    case of a 1 MiB new partition, a warning message would be displayed
    indicating that "A partition cannot have a length of 0 sectors".
    
    This problem is avoided by applying similar logic as was used to
    address the following bug:
    Bug #626946 - Destination partition smaller than source partition

2010-09-09  Curtis Gedak <gedakc@gmail.com>

    Fix paste destination partition smaller than source (#626946)
    
    Prior to this enhancement when copying and pasting a partition
    after a cylinder aligned partition, the destination partition
    would become smaller than the source partition if align to MiB
    was selected.
    
    Closes bug #626946 - Destination partition smaller than source
                         partition.

2010-09-08  Curtis Gedak <gedakc@gmail.com>

    Ensure default partition alignment is mebibyte

2010-09-08  Bruno Brouard <annoa.b@gmail.com>

    Updated French translation

2010-09-07  Curtis Gedak <gedakc@gmail.com>

    Fix numerical mismatch when graphically moving logical partition (#628554)

2010-09-06  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2010-09-05  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-09-04  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-09-03  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-09-01  Curtis Gedak <gedakc@gmail.com>

    Warn partition move queued that might break boot process (#627199)

2010-08-29  Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>

    Updated Japanese translation.

2010-08-25  Curtis Gedak <gedakc@gmail.com>

    Enable to work with new dmraid and parted without dmraid support
    
    Newer versions (dmraid-1.0.0-rc16?) of dmraid default to always
    creating partition names by inserting the letter 'p' between the
    device name and the partition number.  Since this is not
    consistent with older versions of dmraid, add extra logic to
    ensure that newer versions of dmraid do not insert this extra
    letter 'p'.
    
    Rename method get_udev_name to get_udev_dm_name and enhance to
    retrieve the property DM_NAME.
    
    Handle situation where parted, and hence libparted, has been
    configured with --disable-device-mapper.  In this situation on
    some distros the device name could be /dev/dm-0.  This results in
    invalid partition names such as /dev/dm-0p1.  Add logic to decode
    the actual /dev/mapper name.

2010-08-25  Curtis Gedak <gedakc@gmail.com>

    Minor cosmetic formatting change

2010-08-17  Curtis Gedak <gedakc@gmail.com>

    Remove dependency on kpartx for fake RAID support
    
    With this patch the commands required to support motherboard BIOS
    RAID, also known as fake RAID, are dmraid and dmsetup.
    
    If the kpartx command is available, it will be used to maintain
    device entries that follow the naming convention used by kpartx.
    
    Closes Ubuntu launchpad bug 554582 - GParted does not list dmraid
    devices
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/554582

2010-08-17  Curtis Gedak <gedakc@gmail.com>

    Ensure partition path name is compatible with dmraid (#622217)
    
    This patch along with a few preceding patches address the
    following bug reports:
    
    Closes bug #622217 - gparted live 0.6.0-1 incompatibility with
    AMD RAID (SB750 southbridge)
    
    Closes Ubuntu launchpad bug 600729 - Gparted not usable on
    fakeraid arrays
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/600729

2010-08-17  Curtis Gedak <gedakc@gmail.com>

    Create new method make_path_dmraid_compatible
    
    This method will be used to ensure that the partition path
    matches the name that would be created by the dmraid command.

2010-08-15  Curtis Gedak <gedakc@gmail.com>

    Replace function ped_partition_get_path with method get_partition_path

2010-08-15  Curtis Gedak <gedakc@gmail.com>

    Create new method get_partition_path
    
    This method will be used as an entry point to the libparted
    function ped_partition_get_path

2010-08-15  Curtis Gedak <gedakc@gmail.com>

    Simplify logic in set_device_partitions method
    
    Also clean up some white space

2010-08-16  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-08-14  Christian Kirbach <Christian.Kirbach@googlemail.com>

    Updated German translation

2010-08-12  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-08-11  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-08-11  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2010-08-10  Curtis Gedak <gedakc@gmail.com>

    Update README with udisks command usage note

2010-08-10  Curtis Gedak <gedakc@gmail.com>

    Prevent partition table creation if partitions are active
    
    Prevent creating new partition tables on devices that have
    mounted file systems, or enabled swap space.
    
    Closes Ubuntu launchpad bug #503125 - gparted allows user to
    overwrite active mounted partition
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/503125

2010-08-10  Curtis Gedak <gedakc@gmail.com>

    Add new method active_partitions_on_device_count

2010-08-10  Curtis Gedak <gedakc@gmail.com>

    Move method to match header file
    
    Also update copyright year

2010-08-10  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2010-08-09  Curtis Gedak <gedakc@gmail.com>

    Prevent swapon and mount if partition in operation queue (#611431)

2010-08-09  Curtis Gedak <gedakc@gmail.com>

    Add new method partition_in_operation_queue_count

2010-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add labelling of linux-swap
    
    When found, use external swaplabel command to label linux-swap
    partitions.  (Available from util-linux-ng 2.18 released 30 Jun 2010).

2010-08-06  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-08-01  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-08-01  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.6.2   ==========

2010-07-31  Aron Xu <aronxu@gnome.org>

    Change 你 to 您.

2010-07-31  Aron Xu <aronxu@gnome.org>

    Update Simplified Chinese translation.

2010-07-22  Curtis Gedak <gedakc@gmail.com>

    Ensure original partition boundaries kept on rollback of failed move

2010-07-22  Curtis Gedak <gedakc@gmail.com>

    Fix problem with logical partition move overwriting EBR (#623630)
    
    Prevent overwriting meta data (Extended Boot Rectors) for logical
    partitions by temporarily increasing the size of the logical
    partition to encompass all of the space involved in the move
    operation.  The libparted library will move the EBR as needed to
    permit this to happen.  After the move the logical partition is
    set to the proper size.
    
    This fixes bug #623630 - Move logical partition to right yields
    invalid partition table on /dev/sda - wrong signature 0

2010-07-19  Curtis Gedak <gedakc@gmail.com>

    Re-enable MiB partition alignment option

2010-07-21  Curtis Gedak <gedakc@gmail.com>

    Re-word comment for gparted invocation using udisks and hal-lock

2010-07-21  Curtis Gedak <gedakc@gmail.com>

    If available use both udisks and hal-lock to prevent auto-mounting

2010-07-18  Dimitris Tsiolis <dimits7@gmail.com>

    Updated Greek translation for gparted

2010-07-12  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Updated Kazakh translation for gparted

2010-07-11  Petr Kovar <pknbe@volny.cz>

    Update Czech help translation by Marek Cernocky

2010-07-10  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-07-08  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-07-08  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.6.1   ==========

2010-07-08  Curtis Gedak <gedakc@gmail.com>

    Disable MiB alignment temporarily until bug #623630 can be fixed

2010-07-08  Adrian Guniš <andygun@seznam.cz>

    Update Czech translation

2010-07-06  Curtis Gedak <gedakc@gmail.com>

    Fix crash moving partitions when size is a multiple of 16 MiB (#623697)

2010-07-06  Yaron Shahrabani <sh.yaron@gmail.com>

    Updated Hebrew translation.

2010-06-20  Fran Diéguez <fran.dieguez@mabishu.com>

    Update Galician translations

2010-06-18  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-06-18  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.6.0   ==========

2010-06-16  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2010-06-16  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2010-06-15  Djavan Fagundes <djavan@comum.org>

    Updated Brazilian Portuguese translation

2010-06-14  Milo Casagrande <milo@ubuntu.com>

    [l10n] Updated Italian translation

2010-06-14  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2010-06-14  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2010-06-11  Claude Paroz <claude@2xlibre.net>

    [help] Updated French translation

2010-06-11  Mario Blättermann <mariobl@gnome.org>

    Updated German doc translation

2010-06-11  Claude Paroz <claude@2xlibre.net>

    Updated French translation
    
    Contributed by Bruno Brouard and Claude Paroz

2010-06-08  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2010-06-03  Curtis Gedak <gedakc@gmail.com>

    Fix error in GParted Manual DTD

2010-06-03  Curtis Gedak <gedakc@gmail.com>

    Add sector size support message to configure script

2010-06-01  Curtis Gedak <gedakc@gmail.com>

    Handle devkit-disks being renamed to udisks on Dec. 1, 2009.
    
    Reference link for devkit-disks being renamed to udisks:
    http://www.freedesktop.org/wiki/Software/DeviceKit-disks

2010-06-01  Curtis Gedak <gedakc@gmail.com>

    Update GParted manual with the option to align to MiB
    
    This change is part of adding the option to align to MiB (#617409).

2010-05-30  Curtis Gedak <gedakc@gmail.com>

    Add udevinfo and udevadm as optional commands used with dmraid support

2010-05-31  Petr Kovar <pknbe@volny.cz>

    Update Czech translation by Adrian Gunis

2010-05-29  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-05-28  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-05-28  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-05-27  Curtis Gedak <gedakc@gmail.com>

    Enable support for devices with sector sizes > 512 bytes (#607165)
    
    GParted requires libparted version 2.2 or higher to support devices
    with sector sizes > 512 bytes.
    
    This commit marks the end of a series of enhancements required to
    provide support for sector sizes > 512 bytes.

2010-05-27  Curtis Gedak <gedakc@gmail.com>

    Fix off by 1 sector math when looking for unallocated space

2010-05-27  Curtis Gedak <gedakc@gmail.com>

    Only show exactly 1 MiB unallocated space if not MBR or EBR
    
    Do not show unallocated space of exactly 1 MiB in size if:
    
      a) The space is at the front of the drive.
    
         This space is reserved for the partition table and the
         Master Boot Record.
    
    or
    
      b) The space immediately precedes a logical partition.
    
         This space is reserved for the Extended Boot Record.

2010-05-26  Curtis Gedak <gedakc@gmail.com>

    Change behavior to better align with GNOME HIG on drop-down lists
    
    Quote from GNOME Human Interface Guidelines 2.2.1 on Drop-down lists:
    
         "Selecting an item from a drop-down list should not affect the
         values of any other controls. It may sensitize, insensitize, hide
         or show other controls, however."

2010-05-26  Curtis Gedak <gedakc@gmail.com>

    Improve cylinder alignment for partitions less than a disk cylinder

2010-05-25  Curtis Gedak <gedakc@gmail.com>

    Limit graphic movement according to required boot record space
    
    Also respect minimum size for extended partition in graphical
    representation.
    
    This change is part of adding the option to align to MiB (#617409).

2010-05-25  Curtis Gedak <gedakc@gmail.com>

    Fix short by 1 MiB on spinbutton before with resize/move

2010-05-21  Curtis Gedak <gedakc@gmail.com>

    Add gnome-doc-utils to apt-get install example

2010-05-20  Curtis Gedak <gedakc@gmail.com>

    Disable resizing when the total area is less than two mebibytes

2010-05-20  Curtis Gedak <gedakc@gmail.com>

    Ensure space available for GPT backup partition table on paste

2010-05-25  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-05-24  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-05-24  Fran Diéguez <fran.dieguez@mabishu.com>

    Updated Galician translations

2010-05-21  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-05-20  Curtis Gedak <gedakc@gmail.com>

    Add partition alignment option to align to MiB (#617409)
    
    Make align to MiB the default setting instead of align to cylinder.
    
    Migrate logic for alignment to cylinder into its own method
    snap_to_cylinder, and place common logic in snap_to_alignment.
    
    Add alignment checks for situations where space is needed for Master
    Boot Record or Extended Boot Record.
    
    Adjust ranges on spin buttons according to required boot record space.
    
    Copy fix for off by one sector (#596552) from
    Dialog_Partition_New::Get_New_Partition to
    Dialog_Base_Partition::Get_New_Partition
    
    Enhance resize / move logic for checking locations of nearby logical
    partitions to not depend on the partition ordering.
    
    Note: This commit does not include limiting graphic movement according
    to required boot record space.

2010-05-09  Curtis Gedak <gedakc@gmail.com>

    Change partition alignment check box to a drop down menu
    
    Also add signal handler to alignment menu to update file system
    minimum size.
    This enhancement is to prepare for adding a third alignment
    option to align to MiB.

2010-05-04  Curtis Gedak <gedakc@gmail.com>

    Remove incorrect comment

2010-05-04  Curtis Gedak <gedakc@gmail.com>

    Ensure sector size is set when getting a new partition
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-05-04  Curtis Gedak <gedakc@gmail.com>

    Fix used and unused sector math when pasting a copied partition
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-05-04  Curtis Gedak <gedakc@gmail.com>

    Fix minimum size calculation when pasting a copied partition
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-28  Curtis Gedak <gedakc@gmail.com>

    Enhance detection for ext3, fat16, fat32, linux-swap, and hfsplus
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-28  Curtis Gedak <gedakc@gmail.com>

    Enhance file system space unused math to use actual sector size

2010-04-28  Curtis Gedak <gedakc@gmail.com>

    Enhance file system detection to use FS_Info method - blkid
    
    This enhancement was added because the current libparted library,
    version 2.2, does not appear to detect file systems for sector
    sizes other than 512 bytes.

2010-04-28  Curtis Gedak <gedakc@gmail.com>

    Rename get_length method to get_sector_length
    
    This rename is to try to reduce future confusion between
    partition length in sectors versus partition length in bytes.

2010-04-27  Curtis Gedak <gedakc@gmail.com>

    Replace sector math with get_byte_length method where appropriate
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-27  Curtis Gedak <gedakc@gmail.com>

    Enhance set_valid_operations method to handle different sector sizes

2010-04-27  Curtis Gedak <gedakc@gmail.com>

    Create get_byte_length method

2010-04-26  Curtis Gedak <gedakc@gmail.com>

    Remove 512 byte based units and rename _FACTOR to BYTE
    
    With the removal of the 512 byte constants, such as MEBIBYTE, it
    was possible to rename the _FACTOR constants back to BYTE
    constants.  The _FACTOR constants, such as MEBI_FACTOR, were a
    temporary measure to help in the transition to support devices
    with sector sizes > 512 bytes.

2010-04-26  Curtis Gedak <gedakc@gmail.com>

    Replace constant MEBIBYTE with appropriate MEBI_FACTOR math
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-26  Curtis Gedak <gedakc@gmail.com>

    Remove default sector size
    
    The DEFAULT_SECTOR_SIZE was a temporary measure to help in the
    transition to support devices with sector sizes > 512 bytes.  It
    is no longer needed.

2010-04-26  Curtis Gedak <gedakc@gmail.com>

    Replace default sector size with appropriate sector size
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-26  Curtis Gedak <gedakc@gmail.com>

    Enhance copy_filesystem method to work with sector sizes
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-25  Curtis Gedak <gedakc@gmail.com>

    Clean up progress bar current status after copy/move action
    
    Also ensure that final progress bar current status is set to
    completed value when the copy blocks method completes.

2010-04-23  Curtis Gedak <gedakc@gmail.com>

    Add logic for copy and paste between devices with different sector sizes
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-19  Curtis Gedak <gedakc@gmail.com>

    Set sector size and add to operation and dialog methods
    
    This change is in preparation for supporting sectors sizes > 512 bytes.

2010-04-19  Curtis Gedak <gedakc@gmail.com>

    Add device sector size to partition object
    
    The device sector size is needed in all calculations that convert
    between sectors and bytes.  The device sector_size is included in
    the partition object because this object is used to contain
    operation information in addition to actual partitions and
    unallocated space.  A second option was considered to pass the
    device object to many methods, but this was considered a much
    larger task that might not provide significant gains in
    maintainability.

2010-04-19  Gintautas Miliauskas <gintautas@miliauskas.lt>

    Updated Lithuanian translation by Aurimas Černius.

2010-04-17  André Gondim <andregondim@ubuntu.com>

    Updated Brazilian Portuguese translation, reviewed by Vladimir Melo <vmelo@gnome.org>.

2010-04-17  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-04-11  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-04-10  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-04-08  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2010-04-07  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-04-07  Curtis Gedak <gedakc@gmail.com>

    Enhance copy methods for sector sizes > 512 bytes

2010-04-04  Maxim V. Dziumanenko <dziumanenko@gmail.com>

    Updated Ukrainian translation

2010-03-31  Dimitris Tsiolis <dimits7@gmail.com>

    Updated Greek translation for gparted

2010-03-30  Cheng-Chia Tseng <pswo10680@gmail.com>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2010-03-27  Gintautas Miliauskas <gintautas@miliauskas.lt>

    Updated Lithuanian translation.

2010-03-25  Curtis Gedak <gedakc@gmail.com>

    Enhance Makefile generated ChangeLog entries
    
    Convert git log entries, which are prepended to the ChangeLog, to
    look more like traditional ChangeLog entries.

2010-03-24  Curtis Gedak <gedakc@gmail.com>

    Enable copy to work on computers with only 128 MiB RAM (#613430)

2010-03-23  Curtis Gedak <gedakc@gmail.com>

    Enhance format_size() for sector sizes > 512 bytes

2010-03-23  Curtis Gedak <gedakc@gmail.com>

    Remove GParted:: prefix from in front of UNIT constants

2010-03-23  Curtis Gedak <gedakc@gmail.com>

    Enhance sector_to_unit() for sector sizes > 512 bytes

2010-03-16  Curtis Gedak <gedakc@gmail.com>

    Convert file system maximum from sector to byte value

2010-03-16  Curtis Gedak <gedakc@gmail.com>

    Convert file system minimum from sector to byte value

2010-03-16  Curtis Gedak <gedakc@gmail.com>

    Add constants to aid in transition to support sector sizes > 512 bytes

2010-03-23  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-18  Inaki Larranaga Murgoitio <dooteo@zundan.com>

    Updated Basque language

2010-03-18  Timo Jyrinki <timo.jyrinki@iki.fi>

    Updated Finnish translation by Jiri Grönroos. Via Launchpad.

2010-03-14  Curtis Gedak <gedakc@gmail.com>

    Fix mkswap error "UUID parsing failed" when resizing with no UUID
    
    See following debian bug report:
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=573836

2010-03-05  Curtis Gedak <gedakc@gmail.com>

    Enhance erase_filesytem_signatures() for sector sizes > 512 bytes

2010-03-05  Curtis Gedak <gedakc@gmail.com>

    Enhance file system detection for sector sizes > 512 bytes

2010-03-04  Curtis Gedak <gedakc@gmail.com>

    Set device length to value from libparted
    
    Previously this value was calculated to end on a cylinder
    boundary.  On today's larger hard drives, which simply emulate
    Cylinders/Heads/Sectors, some disk space might remain after the
    last cylinder.  This space would always be less than a full
    cylinder in size.  Now this space will be visible to the user.

2010-03-14  Adi Roiban <adi@roiban.ro>

    Update Romanian translation

2010-03-13  Kjartan Maraas <kmaraas@gnome.org>

    Updated Norwegian bokmål translation

2010-03-10  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2010-03-10  Petr Uzel <petr.uzel@suse.cz>

    Avoid compiler warning
    
    Report of this problem can be found in the mailing list archive:
    http://sourceforge.net/mailarchive/forum.php?thread_name=4B967C26.2090608%40gmail.com&forum_name=gparted-devel

2010-03-08  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-03-08  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.5.2   ==========

2010-03-08  Petr Kovar <pknbe@volny.cz>

    Update Czech translation by Adrian Gunis

2010-03-08  Peteris Krisjanis <pecisk@gmail.com>

    Updated Latvian translation.

2010-03-07  Peteris Krisjanis <pecisk@gmail.com>

    Updated Latvian translation.

2010-03-07  Peteris Krisjanis <pecisk@gmail.com>

    Updated Latvian translation.

2010-03-05  Fran Diéguez <frandieguez@ubuntu.com>

    Updated Galician translation

2010-03-05  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2010-03-03  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-03  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-03  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2010-03-02  Djavan Fagundes <djavan@comum.org>

    Updated Brazilian Portuguese translation

2010-03-03  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-02  Alexander Shopov <ash@contact.bg>

    Updated Bulgarian translation

2010-03-02  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-01  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-01  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2010-03-01  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-03-01  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2010-03-01  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-03-01  Curtis Gedak <gedakc@gmail.com>

    Fix bug when copying huge NTFS partition never finishes (#575324)
    
    Improved logic in cleanup_cursor method to minimize the number of
    string erase operations performed.
    
    Previously when the NTFS copy finished, GParted would take an
    exceptionally long time to clean up the output.  This was due to
    the huge number of small string erase operations performed on a
    extremely large string.

2010-03-01  Curtis Gedak <gedakc@gmail.com>

    Add check if partition table re-read work around code is needed
    
    A patch to alleviate the "failure to inform kernel of partition
    changes problem" (bug #604298) has been included in parted-2.2.
    Hence when parted-2.2 or higher is used, the work around code in
    GParted is not required.

2010-03-01  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-27  Curtis Gedak <gedakc@gmail.com>

    Improve logic for libparted minimum version check

2010-02-26  Curtis Gedak <gedakc@gmail.com>

    Remove comment about wrong identifier for HFS/HFS+ (#568867)
    
    With parted-2.2 the partition identifier for HFS and HFS+ is set to 0xAF.
    With previous versions of parted this was incorrectly set to 0x83.

2010-02-25  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-25  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-25  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-02-24  Curtis Gedak <gedakc@gmail.com>

    Disable extended option for non-MSDOS and non-DVH disk types (#583906)
    
    According to parted documentation, only "msdos" and "dvh" disk
    types (or partition table types) support extended partitions.
    All other disk types support primary partitions only.

2010-02-23  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-23  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-02-22  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-22  Curtis Gedak <gedakc@gmail.com>

    Make partition "New" label available for translation (#610540)

2010-02-22  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-02-21  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-02-21  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-20  Curtis Gedak <gedakc@gmail.com>

    Add sector size to device display pane
    
    Also add sector_size to Device class.  This is the start of an
    enhancement to add support for devices with sector sizes other
    than 512 bytes (#607165).

2010-02-20  Bruce Cowan <bcowan@fastmail.co.uk>

    Update British English translation
    
    Fixes #610547

2010-02-20  Curtis Gedak <gedakc@gmail.com>

    Indicate required software packages if unable to read file system (#576908)

2010-02-20  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-20  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-20  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-20  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-20  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-02-04  Henrique P. Machado <hpmachado@gnome.org>

    Updated Brazilian Portuguese Translation

2010-02-02  Marek Černocký <marek@manet.cz>

    Update Czech translation

2010-01-27  Curtis Gedak <gedakc@gmail.com>

    Increase required gtkmm-2.4 version 2.16.0 for gtk_show_uri (#608065)
    
    Building GParted with gtkmm-2.4 version 2.14.0 would fail with:
         error: ‘gtk_show_uri’ was not declared in this scope.
    This problem does not occur with version 2.16.0.

2010-01-25  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2010-01-25  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.5.1   ==========

2010-01-25  Inaki Larranaga Murgoitio <dooteo@zundan.com>

    Updated Basque language

2010-01-24  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2010-01-21  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2010-01-20  Djavan Fagundes <djavan@comum.org>

    Updated Brazilian Portuguese translation.

2010-01-19  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2010-01-18  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-01-18  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2010-01-18  Bruce Cowan <bcowan@fastmail.co.uk>

    Updated British English translation

2010-01-17  Petr Kovar <pknbe@volny.cz>

    Add Czech help translation by Marek Cernocky

2010-01-17  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2010-01-17  Alexander Shopov <ash@contact.bg>

    Updated Bulgarian translation

2010-01-04  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2010-01-17  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-01-17  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-01-17  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-01-16  Curtis Gedak <gedakc@gmail.com>

    Avoid crashes by ignoring devices with sector size > 512 bytes (#595309)
    
    This is not an ideal solution because devices with sector sizes
    greater than 512 bytes are silently ignored from a graphical interface
    perspective.  Only if the user starts gparted from the command line
    will the "ignoring device" message be seen.
    
    In my opinion this short term solution of ignoring these devices is
    still better than a gparted crash which might also result in data
    loss.
    
    A bug report requesting support for devices with sector sizes > 512
    bytes has been created.
    https://bugzilla.gnome.org/show_bug.cgi?id=607165
    
    Thanks go to Jan Claeys for the initial small patch.

2010-01-15  Curtis Gedak <gedakc@gmail.com>

    Work around: retry ped_disk_commit_to_os() after sleep(1) (#604298)
    
    Bug #604298 involves a problem that can occur when GParted uses
    libparted to manipulate a partition table, but the
    ped_disk_commit_to_os() function fails to inform the Linux kernel of
    these changes to the partition table.  This problem is intermittent in
    nature and is difficult to reliably reproduce.
    
    This change is an attempt at a work around.  If the first call to
    ped_disk_commit_to_os() fails, then we sleep for 1 second to allow the
    system to settle before invoking the function call again.  My testing
    has shown that this greatly improves the chances of successfully
    informing the kernel of partition changes.
    
    Thanks go to François Dupoux and Steven Shiau for their suggestions
    and help to resolve this problem.

2010-01-15  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2010-01-14  Curtis Gedak <gedakc@gmail.com>

    Update copyright years in fat16.cc and fat32.cc

2010-01-14  Curtis Gedak <gedakc@gmail.com>

    Fix problem reading some FAT32 partitions (#605175)
    
    This problem was introduced with GParted 0.4.7 when the "-a"
    option was removed from the dosfsck command.  The dosfsck command
    is used to read the number of used sectors.  Instead we will now
    use the "-n" option which does not write any changes to the file
    system, and allows non-interactive operation.

2010-01-12  Petr Kovar <pknbe@volny.cz>

    Updated Czech translation by Adrian Gunis and Marek Cernocky

2010-01-11  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2010-01-08  Curtis Gedak <gedakc@gmail.com>

    Ensure commit_to_os() return code is passed up through commit() method
    
    This problem was discovered while investigating bug #604298

2010-01-08  Anton Méixome <meixome@certima.net>

    Updated Galician Translation

2010-01-05  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2010-01-02  Curtis Gedak <gedakc@gmail.com>

    Update copyright year

2010-01-02  Curtis Gedak <gedakc@gmail.com>

    Clean up code for old bug #157871
    
    Remove commented code and boolean use-C-lang parameter for
    Utils::num_to_str() method because this bug was fixed in
    gcc-4.0.3.  The GNU gcc compiler versions 4 and up are now
    commonly in use.  Also due to previous partial commenting and
    removal of the code, the code was non-functional
    
    Thanks goes to Jan Claeys for pointing out this clean up
    opportunity.

2009-12-29  Jan Janssen <medhefgo@web.de>

    Fixed Bug #595141 in German translation

2009-12-19  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-12-19  Antonio Fernandes C. Neto <fernandes@pelivre.org>

    Updated Brazilian Portuguese translation

2009-12-19  Lucian Adrian Grijincu <lucian.grijincu@gmail.com>

    Update Romanian translation

2009-12-13  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-12-09  Curtis Gedak <gedakc@gmail.com>

    Clear libparted kernel re-read messages when scanning devices
    
    When calling commit_to_os() with newer Linux kernels,
    parted-1.9.0, and at least one partition mounted on the device,
    the following error message is displayed:
    
        The kernel was unable to re-read the partition table on
        /dev/sda (Device or resource busy).  This means Linux won't
        know anything about the modifications you made until you
        reboot.  You should reboot your computer before doing
        anything with /dev/sda.
    
    If this message is not cleared then it will remain in the
    libparted_message array and could potentially be displayed along
    with an error message for a subsequent scanned disk device.

2009-12-06  Curtis Gedak <gedakc@gmail.com>

    Change field labels to sentence capitalization
    
    Change is to align with GNOME Human Interface Guidelines 2.2.
    http://library.gnome.org/devel/hig-book/stable/design-text-labels.html.en

2009-12-06  Curtis Gedak <gedakc@gmail.com>

    Change wording from disk label type to more common partition table

2009-12-06  Curtis Gedak <gedakc@gmail.com>

    Update optional list of commands used

2009-12-06  Curtis Gedak <gedakc@gmail.com>

    Update list of optional commands used by gparted

2009-12-05  Adi Roiban <adi@roiban.ro>

    Update Romanian translation

2009-12-03  Curtis Gedak <gedakc@gmail.com>

    Capture libparted messages when invalid partition table found #337244
    
    When libparted reports a problem with the partition table, capture
    this message and attach it to the "unallocated" partition that spans
    the entire disk.
    
    Examples of these types of problems encountered are:
         /dev/sda: unrecognised disk label
         Can't have overlapping partitions.

2009-12-02  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2009-12-02  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.5.0   ==========

2009-12-01  Ask H. Larsen <asklarsen@gmail.com>

    Updated Danish translation

2009-11-29  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-11-28  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2009-11-27  Curtis Gedak <gedakc@gmail.com>

    Remove extra line feed from NEWS file

2009-11-27  Djavan Fagundes <dnoway@gmail.com>

    Updated Brazilian Portuguese translation

2009-11-26  Matej Urbančič <mateju@svn.gnome.org>

    Updated Slovenian translation

2009-11-25  Gabor Kelemen <kelemeng@gnome.hu>

    Updated Hungarian translation

2009-11-25  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2009-11-25  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2009-11-25  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2009-11-25  Curtis Gedak <gedakc@gmail.com>

    Re-enable ability to paste into an existing partition (#582101)
    
    The ability to paste into an existing partition was disabled in
    v0.4.0.  This ability has been re-enabled along with a warning
    dialog that indicates the data in the existing partition will be
    lost if the copy and paste operation is applied.

2009-11-25  Djavan Fagundes <dnoway@gmail.com>

    Updated Brazilian Portuguese translation.

2009-11-23  Curtis Gedak <gedakc@gmail.com>

    Add mdadm requirement to README for Linux software RAID

2009-11-15  Krasimir Chonov <mk2616@abv.bg>

    Updated Bulgarian translation

2009-11-13  Adrian Guniš <andygun@seznam.cz>

    Update Czech translation.

2009-11-05  Curtis Gedak <gedakc@gmail.com>

    Cleanup file copyright entries
    
    Restore copyright entries by original author to those of his last
    known repository commit titled "released gparted-0.3.4 on
    LarryT's request." on Feb 25, 2007.
    
    Add my own copyright entries for files in which I changed source
    code.  Files in which I only made spelling changes do not have my
    copyright entry added.

2009-11-05  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2009-11-04  Curtis Gedak <gedakc@gmail.com>

    Update AUTHORS file for Linux software RAID functionality

2009-11-03  Curtis Gedak <gedakc@gmail.com>

    Remove MAINTAINERS file since no longer needed with git

2009-11-03  Curtis Gedak <gedakc@gmail.com>

    Add some entries to gparted.doap file

2009-11-03  Curtis Gedak <gedakc@gmail.com>

    Added auto detection of Linux software RAID devices
    
    Auto detection of Linux software RAID devices was lost in GParted
    0.3.8.  This was because device scanning by the libparted device
    call ped_device_probe_all() was replaced with custom code within
    GParted to scan /proc/partitions for devices.
    
    The reason the libparted call was replaced was due to a long
    scanning problem with ped_device_probe_all(), a non-existent
    physical floppy device, and a BIOS setting indicating a floppy
    drive existed.  See bug #351753:
    https://bugzilla.gnome.org/show_bug.cgi?id=351753

2009-11-03  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-11-03  Curtis Gedak <gedakc@gmail.com>

    Rename NO_DOC to HAVE_DISABLE_DOC for consistency sake

2009-11-03  Curtis Gedak <gedakc@gmail.com>

    Replace gnome-open with gtk_show_uri (#600046)
    
    This change was performed to align with a GNOME goal:
    http://live.gnome.org/GnomeGoals/RemoveGnomeOpenGnomeHelp
    
    For backwards compatibility, the gnome-open command is used
    when gtkmm < 2.14.0.

2009-11-02  Curtis Gedak <gedakc@gmail.com>

    Correct desktop files for name and generic name entries (#600048)
    
    This change was performed to align with a GNOME goal:
    http://live.gnome.org/GnomeGoals/CorrectDesktopFiles

2009-11-02  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2009-11-02  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.4.8   ==========

2009-11-02  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-11-01  Milo Casagrande <milo@ubuntu.com>

    Removed obsoletes from Italian translation

2009-11-01  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation

2009-10-31  Djavan Fagundes <dnoway@gmail.com>

    Updated Brazilian Portuguese translation

2009-10-31  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2009-10-29  Bruce Cowan <bcowan@fastmail.co.uk>

    Updated British English translation
    
    Changed back to original units, I don't think this sort of thing should
    be changed in en_GB.

2009-10-28  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2009-10-26  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2009-10-26  Claude Paroz <claude@2xlibre.net>

    Updated French translation
    
    Contributed by Julien Hardelin and Claude Paroz

2009-10-26  Curtis Gedak <gedakc@gmail.com>

    Change em dashes to period with new sentence
    
    With the em dashes in the translatable strings, a 'make distcheck'
    would fail.  Hence these have been change to be a period followed by a
    new sentence.

2009-10-26  Curtis Gedak <gedakc@gmail.com>

    Remove unable to re-read partition table warning (#599078)
    
    When used with parted-2.0, GParted would display a warning
    message indicating "kernel unable to re-read partition table" on
    every device scan for each device with at least one partition
    mounted.  Device scans occur when GParted starts up, immediately
    after a series of actions are applied, and upon manually invoked
    device refreshes.  This, I believe, is excessive notification to
    the user and would be annoying.

2009-10-25  Curtis Gedak <gedakc@gmail.com>

    Ensure no pending operations before creating partition table (#583896)
    
    This fixes a situation where GParted would crash if a user queued
    up some operations, created a new partition table, and then
    applied the operations.

2009-10-24  Curtis Gedak <gedakc@gmail.com>

    Update copyright year for Win_GParted class

2009-10-24  Curtis Gedak <gedakc@gmail.com>

    Improve feedback when creating or pasting partition (#579266)
    
    Improve the feedback to the user when creating or pasting a
    partition on a device with no partition table found.
    
    Prior to this enhancement if a user tried to create or paste a
    partition onto a device with no partition table found, GParted
    would present the user with a Create Partition Table dialog.
    
    When creating a new partition this could cause confusion for
    users who were trying to format the disk.  The user could
    mistakenly believe the choice of an MS-DOS file system was being
    presented.
    
    Similarly on a paste operation it could be confusing to be
    presented with a dialog to create a partition table without any
    explanation of why a partition table was suddenly required in the
    midst of the paste operation.
    
    Neither the new partition creation, nor the partition paste
    actions were performed after the Create Partition Table dialog
    was displayed.

2009-10-22  Curtis Gedak <gedakc@gmail.com>

    Add padding to progress dialog window

2009-10-18  Curtis Gedak <gedakc@gmail.com>

    Change field labels to sentence capitalization (#583885)
    
    This change done to align with the GNOME Human Interface Guidelines.
    http://library.gnome.org/devel/hig-book/stable/design-text-labels.html.en

2009-10-18  Curtis Gedak <gedakc@gmail.com>

    Remove repeated titles in progress dialog (#589558)

2009-10-17  Curtis Gedak <gedakc@gmail.com>

    Add help dialog when configured with --disable-doc

2009-10-17  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-10-16  Curtis Gedak <gedakc@gmail.com>

    Use both devkit-disks and hal-lock if available
    
    During the transition period from HAL to devicekit-disks some
    distributions might require both methods to prevent device
    auto-mounting.  See Ubuntu launchpad bug link:
    https://bugs.launchpad.net/ubuntu/+source/gparted/+bug/428133

2009-10-16  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2009-10-15  Sveinn í Felli <sveinki@nett.is>

    Added IS translation

2009-10-15  Curtis Gedak <gedakc@gmail.com>

    Add support for devicekit-disks device automount prevention

2009-10-14  Curtis Gedak <gedakc@gmail.com>

    Further improve dmraid device and name recognition

2009-10-14  Curtis Gedak <gedakc@gmail.com>

    Update URL for bug reporting link

2009-10-13  Curtis Gedak <gedakc@gmail.com>

    Rework logic to resolve real path for symbolic link devices (#582687)

2009-10-13  Curtis Gedak <gedakc@gmail.com>

    Add adjective to indicate size of patch and fix spacing

2009-10-07  Bruce Cowan <bcowan@fastmail.co.uk>

    Minor string fixes (#597686)

2009-10-10  André Gondim <andregondim@ubuntu.com>

    Updated Brazilian Portuguese translation and corrected a incorrect translation

2009-10-09  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2009-10-09  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.4.7   ==========

2009-10-07  Bruce Cowan <bcowan@fastmail.co.uk>

    Updated British English translation

2009-10-06  Curtis Gedak <gedakc@gmail.com>

    Enhance configure to work with libparted two digit version number

2009-09-30  Curtis Gedak <gedakc@gmail.com>

    Ensure dmraid devices created for devices passed on command line

2009-09-30  Curtis Gedak <gedakc@gmail.com>

    Improve logic for retrieval of device udev name

2009-09-30  Curtis Gedak <gedakc@gmail.com>

    Improve logic to recognize dmraid devices

2009-09-30  Curtis Gedak <gedakc@gmail.com>

    Simplify logic to ensure dmraid_devices cleared before populating

2009-09-28  Seth Hunter <hunter@ll.mit.edu>

    Fix problem with create new partition size off by one sector (#596552)
    
    With "Round to cylinders" deactivated, creating a new partition would
    create a partition that was one sector too large.
    
    Closes GParted bug #596552

2009-09-09  Piotr Drąg <piotrdrag@gmail.com>

    Updated Polish translation

2009-09-04  Inaki Larranaga Murgoitio <dooteo@zundan.com>

    Updated Basque language

2009-08-20  Adrian Guniš <andygun696@gmail.com>

    Update Czech translation

2009-08-11  Curtis Gedak <gedakc@gmail.com>

    Made set_used_sectors method less meddlesome for FAT16/32
    
    Removed the "-a" flag from the dosfsck command that is used to
    determine the number of used sectors in FAT16 and FAT32 file systems.
    
    Related to GParted bug #569921

2009-08-09  Curtis Gedak <gedakc@gmail.com>

    Resolve real path for symbolic link devices in mount files (#582687)
    
    In order to find a match between the device paths in mount files and
    partitions as found by libparted, the mount device must be a real path
    and not a symbolic link.
    
    Closes GParted bug #582687

2009-08-05  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2009-08-05  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.4.6   ==========

2009-08-03  Denis Arnaud <darnaud@src.gnome.org>

    Updated breton translation, added br in LINGUAS file

2009-08-02  António Lima <amrlima@gmail.com>

    Updated Portuguese translation

2009-08-02  Ask Hjorth Larsen <asklarsen@gmail.com>

    Updated Danish Translation by Ask Hjorth Larsen

2009-08-02  Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>

    Updated Traditional Chinese translation(Hong Kong and Taiwan)

2009-08-01  Djavan Fagundes <dnoway@gmail.com>

    Updated Brazilian Portuguese translation.

2009-08-01  Mattias Põldaru <mahfiaz gmail com>

    Updating Estonian translation

2009-08-01  Milo Casagrande <milo@ubuntu.com>

    Updated Italian translation:
     * Updated translation of the documentation
     * Updated translation of the application

2009-07-31  Curtis Gedak <gedakc@gmail.com>

    Place translator comment in proper location (#590415)

2009-07-31  Claude Paroz <claude@2xlibre.net>

    Updated French manual translation

2009-07-31  Claude Paroz <claude@2xlibre.net>

    Updated French translation

2009-07-31  Mattias Põldaru <mahfiaz gmail com>

    Updating Estonian translation

2009-07-31  Gabor Kelemen <kelemeng@gnome.hu>

    Hungarian translation updated

2009-07-30  Žygimantas Beručka <zygis@gnome.org>

    Updated Lithuanian translation

2009-07-29  Daniel Nylander <po@danielnylander.se>

    Updated Swedish translation

2009-07-28  Curtis Gedak <gedakc@gmail.com>

    Enhance to use new linux-swap "filesystem" types added in parted-1.9.0
    
    Excerpt from parted-1.9.0 release notes follows:
      In libparted, the linux-swap "filesystem" types are now called
      "linux-swap(v0)" and "linux-swap(v1)" rather than "linux-swap(old)"
      and "linux-swap(new)" as in parted 1.8, or "linux-swap" as in older
      versions; "old" and "new" generally make poor names, and v1 is the
      only format supported by current Linux kernels. Aliases for all
      previous names are available.

2009-07-23  Curtis Gedak <gedakc@gmail.com>

    Enhance file parsing to handle tabs properly (#582687)
    
    Previously the read_mountpoints_from_file() method only expected
    a space between arguments in files such as /etc/fstab.  Valid
    delimiters are now space and tab.
    
    Related to GParted bug #582687

2009-07-08  Curtis Gedak <gedakc@gmail.com>

    Cleanup white space in read_mountpoints_from_file method

2009-07-21  Khaled Hosny <khaledhosny@eglug.org>

    Updated Arabic translation

2009-07-14  Mario Blättermann <mariobl@gnome.org>

    Updated German doc translation

2009-07-12  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-07-08  Jorge González <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-07-06  Curtis Gedak <gedakc@gmail.com>

    Remove extra blank line accidentally added in last commit

2009-07-06  Curtis Gedak <gedakc@gmail.com>

    Change button create to apply for partition table creation (#576374)
    
    To further minimize the chance of accidentally creating a new partition
    table, the following steps have been taken:
    
    1)  Rename non-standard Create button to stock Apply button.
    2)  Remove extra warning about erasing entire disk device.
    3)  Update GParted Manual accordingly.
    
    Closes GParted bug #576374

2009-07-06  David Planella <david.planella@gmail.com>

    Updated Catalan translation

2009-07-04  Curtis Gedak <gedakc@gmail.com>

    Make .gitignore gparted* mask more specific (#587065)

2009-06-26  Priit Laes <plaes@plaes.org>

    Added Estonian translation.

2009-06-26  Claude Paroz <claude@2xlibre.net>

    Add French manual translation
    
    Contributed by Julien Hardelin and Claude Paroz.

2009-06-22  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2009-06-13  Daniel Nylander <po@danielnylander.se>

    Updated sv translation (Daniel Nylander)

2009-06-12  A S Alam <aalam@users.sf.net>

    updating translation for Punjabi (Gurmukhi) pa.po

2009-05-24  Jorge Gonzalez <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-05-18  Jorge Gonzalez <jorgegonz@svn.gnome.org>

    Updated Spanish translation

2009-05-16  Curtis Gedak <gedakc@gmail.com>

    Improve error messages and translator comments
    
    Provide translator sample text, and add more detail to error messages
    when updating the ntfs boot sector.

2009-05-16  Curtis Gedak <gedakc@gmail.com>

    Remove requirement for xxd and dd for NTFS move or paste action
    
    Perform direct update of Number of Hidden Sectors in NTFS boot record.
    This change removes the need for /usr/bin/xxd and /bin/dd.
    Related to GParted bug #574389

2009-05-15  Gabor Kelemen <kelemeng@gnome.hu>

    Hungarian translation updated

2009-05-14  Curtis Gedak <gedakc@gmail.com>

    Require xxd and dd for NTFS move or paste action
    
    Related to GParted bug #574389

2009-05-14  Curtis Gedak <gedakc@gmail.com>

    Remove absolute paths from /usr/bin/xxd and /bin/dd

2009-05-08  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2009-05-08  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-0.4.5   ==========

2009-05-04  Christian Kirbach <Christian.Kirbach@googlemail.com>

    [master] Updated German translation.

2009-05-02  Curtis Gedak <gedakc@gmail.com>

    Ensure /dev file system device entries created before adding device

2009-05-02  Curtis Gedak <gedakc@gmail.com>

    Refactor some logic into separate settle_device method

2009-05-02  Curtis Gedak <gedakc@gmail.com>

    Improve file system detection with fall back to vol_id

2009-05-02  David Planella <david.planella@gmail.com>

    Updated Catalan translation by David Planella

2009-04-29  Curtis Gedak <gedakc@gmail.com>

    Remove get_dmraid_prefix method used to specify a single device
    
    It appears that different dmraid versions handle specifying a
    single dmraid device differently.
    
    dmraid-1.0.0.rc14 uses a partial name only,
      such as "isw" or "isw_cjbdddajhi".
    dmriad-1.0.0.rc15 uses a full name only,
      such as "isw_cjbdddajhi_Vol0".
    
    To maintain compatibility with the broadest range of dmraid versions,
    the ability to specify a single dmraid device is being removed.

2009-04-29  Curtis Gedak <gedakc@gmail.com>

    Ensure kpartx is executed even if dmraid fails

2009-04-28  Curtis Gedak <gedakc@gmail.com>

    Remove temporary debugging information accidentally committed

2009-04-28  Curtis Gedak <gedakc@gmail.com>

    Enhance get_dmraid_name to also check udev information if needed

2009-04-28  Curtis Gedak <gedakc@gmail.com>

    Refactor some logic into separate get_udev_name method

2009-04-27  Curtis Gedak <gedakc@gmail.com>

    Minor style change to place braces on a separate line

2009-04-26  Curtis Gedak <gedakc@gmail.com>

    Improve dmraid device detection with checking udev if needed
    
    Some distros appear to display /dev/dm-# device names with
    libparted.  Since this fails a pattern match with the dmraid
    device name, check with udev to see if a pattern match is
    possible with the name returned from udevinfo or udevadm info.
    
    For example:
         /dev/mapper/isw_cjbdddajhi_Vol0 is the device name
         /dev/dm-0 is a symbolic link pointing to the above device name

2009-04-26  Curtis Gedak <gedakc@gmail.com>

    Update copyright year for FS_Info class

2009-04-24  Curtis Gedak <gedakc@gmail.com>

    Enhance UUID detection to fallback to vol_id if available
    
    Normally, the blkid command will detect the UUID for a file system.
    In cases where blkid fails to detect the UUID and the vol_id command
    is available, then try using the vol_id command.

2009-04-24  Curtis Gedak <gedakc@gmail.com>

    Improve initialization logic for FS_Info class
    
    Ensure that fs_info_cache is populated in any first instantiation in
    a program, even for an instantiation such as:
        FS_Info A(false);

2009-04-24  Curtis Gedak <gedakc@gmail.com>

    Enhance to try udevadm if udevsettle is not found
    
    Newer systems might not have udevsettle.  It has been replaced by
    "udevadm settle".
    Thanks to Lorenzo Cogotti aka Micia for this knowledge, and for a
    proposed solution.

2009-04-23  Curtis Gedak <gedakc@gmail.com>

    Fix typo in gparted short description

2009-04-22  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2009-04-22  Curtis Gedak <gedakc@gmail.com>

    Minor cosmetic fix to reorder Reiser4 detection code
    
    Now the Reiser4 detection code better matches the detection code for
    other file systems.

2009-04-22  Curtis Gedak <gedakc@gmail.com>

    Improve crypt-luks detection (#578300)
    
    Move crypt-luks detection prior to libparted file system detection.
    If libparted file system detection is performed first, then encrypted
    file systems such as ext3 will be incorrectly detected by libparted as
    plain 'ext3' when in fact these file systems are encrypted.

2009-04-22  Curtis Gedak <gedakc@gmail.com>

    Add entries used by eclipse projects

2009-04-21  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Added Kazakh translation

2009-04-20  Curtis Gedak <gedakc@gmail.com>

    Minor update to one line intro for gparted

2009-04-20  Curtis Gedak <gedakc@gmail.com>

    Add gparted.doap to provide short description for git web interface

2009-04-20  Mario Blättermann <mariobl@gnome.org>

    Updated German translation

2009-04-19  Curtis Gedak <gedakc@gmail.com>

    Update HACKING notes with git specific comments

2009-04-19  Curtis Gedak <gedakc@gmail.com>

    Add note that ChangeLogs are no longer used
    
    Enhance Makefile.am to add 'git log' entries to the ChangeLog
    after the release of gparted-0.4.4.  This is performed by a dist-hook
    target only on release.  E.g., make dist

2009-04-18  Curtis Gedak <gedakc@gmail.com>

    Create list of file patterns for git to ignore

2009-04-18  Curtis Gedak <gedakc@gmail.com>

    Ensure that m4 directory exists

2009-04-12  Jorge Gonzalez Gonzalez <jorgegonz@src.gnome.org>

    Updated Spanish translation
    
    svn path=/trunk/; revision=1123

2009-04-17  Curtis Gedak  <gedakc@gmail.com>

        * *: This ChangeLog is no longer used.

	     ChangeLog entries after 2009-04-17 are auto-generated when
	     releasing.
	
	     On April 17, 2009, the source code repository was converted
	     from svn to git.  ChangeLogs are seldom used with git.
	
	     For a detailed list of changes in the entire project,
	     use 'git log' from the top level source directory.

2009-04-02  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.4.4
	  ===================================================

2009-03-27  Curtis Gedak  <gedakc@gmail.com>

	* src/DMRaid.cc: Updated translation and code comments.
	  - Closes GParted bug #576956

2009-03-26  Curtis Gedak  <gedakc@gmail.com>

	* README: Updated requirements for dmraid support.

2009-03-23  Curtis Gedak  <gedakc@gmail.com>

	* src/linux_swap.cc: Maintained label and uuid when resizing swap.
	  - Closes GParted bug #575585

	* src/DMRaid.cc: Fixed error when resizing an extended partition.

2009-03-16  Curtis Gedak  <gedakc@gmail.com>

	* include/DMRaid.h: Enhanced dmraid partition deletion.
	  - Handle partition names with or without a 'p' between the
	    device name and the partition number.

	* include/GParted_Core.h,
	  src/GParted_Core.cc: Improved swap and dmraid mountpoint detection.

2009-03-14  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Added initial support for dmraid devices.
	  - Closes GParted bug #317262

	* include/DMRaid.h,
	  include/Makefile.am,
	  src/DMRaid.cc,
	  src/Makefile.am: Added new class for dmraid support.

	* README: Added note about requirements for dmraid support.
	  - added note that xxd command also needed for NTFS support.

2009-03-13  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/Utils.cc: Removed file_exists() method.
	  - Glib::file_test() already exists and is available for use.

2009-03-12  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/Utils.cc: Added tokenize() and file_exists() methods.

2009-02-27  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Enabled type checking (const instead of #define)

2009-02-25  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Added recognition of /dev/mmcblk* SD/MMC devices.
	  - Closes GParted bug #564985

2009-02-23  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/Dialog_Partition_New.cc,
	  src/DialogFeatures.cc,
	  src/GParted_Core.cc,
	  src/Utils.cc,
	  src/Win_GParted.cc: Added detection of btrfs file system.
	  - Thanks to Luca Bruno for the original btrfs patch that I adapted.
	  - Related to GParted bug #571170

2009-02-20  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Fixed compiler warning regarding parentheses.

2009-02-18  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/Dialog_Partition_New.cc,
	  src/DialogFeatures.cc,
	  src/GParted_Core.cc,
	  src/Utils.cc,
	  src/Win_GParted.cc: Added detection of LUKS encrypted partitions.
	  - Closes GParted bug #490740

2009-02-16  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Base_Partition.cc,
	  src/GParted_Core.cc: Enhanced move/resize functionality.
	  - Only move start sector if dialog space before value is changed.
	  - Closes GParted bug #571151

	* include/Partition.h,
	  src/Partition.cc: Added strict_start indicator.

2009-02-13  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Append -svn to version for continuing development

2009-02-12  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.4.3
	  ===================================================

2009-02-11  Curtis Gedak  <gedakc@gmail.com>

	* gparted.in: Fixed typo of "freedeskdesktop" in hal-lock name.
	  - Thanks to Alain Kalker for discovering this mistake.
	  - Thanks to Jonas Pedersen for reporting this mistake upstream.
	  - Closes GParted bug #571347

2009-02-09  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Fixed crash on startup with Russian language.
	  - Thanks to Dmitriy Motitskiy for small patch.
	  - Closes GParted bug #570855

	* README: Added note blkid is used for ext4 detection.

2009-02-06  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Append -svn to version for continuing development

2009-02-05  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.4.2
	  ===================================================

2009-01-28  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Fixed partition type for linux-swap(new).
	  - Related to GParted bug #419515

2009-01-24  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in.in: Added additional Filesystem category.
	  - Closes GParted bug #568937

	* src/Dialog_Partition_Copy.cc,
	  src/Win_GParted.cc: Enhanced copy/paste checks when MBR/EBR involved.
	  - Related to GParted bug #567402

2009-01-20  Curtis Gedak  <gedakc@gmail.com>

	* doc/gparted.8: Updated manual page.

2009-01-19  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Reworded message when applying operations.
	  - Closes GParted bug #564952

2009-01-13  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Removed space between menu entry and periods.

2009-01-07  Curtis Gedak  <gedakc@gmail.com>

	* src/ntfs.cc: Removed redundant command flag options.

2009-01-06  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Actually commit this file, and
	                       remove src/Partition.o.

	* src/Win_GParted.cc: Redo update copyright year range, again.
	  - Updated copyright year in Help -> About.

	* src/GParted_Core.cc: Added two FS types to recognition as linux-swap.
	  - The GIT version of libparted returns types of linux-swap(new)
	    and linux-swap(old), previously only linux-swap was returned.
	  - Closes GParted bug #419515

	* src/Win_GParted.cc: Redo update copyright year range.
	  - In a recent upgrade to eclipse 3.4.0, I did not realize that
	    the default save option was to remove trailing whitespace, and
	    ensure newline at end of file.  This resulted in way too many
	    differences showing up in the file.

2009-01-03  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Update copyright year range.

2009-01-02  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Improved text for libparted not found error message.
	  - Closes GParted bug #565682

2008-12-31  Curtis Gedak  <gedakc@gmail.com>

	* src/Utils.cc: Added e2fsprogs version required for ext4 support.

2008-12-21  Curtis Gedak  <gedakc@gmail.com>

	* src/Utils.cc: Fixed application crash.
	  - GParted would crash when saving details if locale was not set.

2008-12-20  Curtis Gedak  <gedakc@gmail.com>

	* src/ext4.cc: Add flags to create journal and use extent option.

2008-12-18  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/GParted_Core.cc,
	  src/Utils.cc: Added support for ext4 file systems.
	  - Closes GParted bug #503112

	* include/ext4.h,
	  include/Makefile.am,
	  src/ext4.cc,
	  src/Makefile.am: Created 2 files to support ext4 operations.
	  - Support for ext4 is planned for version 2.6.28 of the Linux kernel.
	  - e2fsprogs version 1.41.0 or higher is required.

	* include/FS_Info.h,
	  src/FS_Info.cc: Added get_fs_type() method

2008-12-08  Curtis Gedak  <gedakc@gmail.com>

	* include/FS_Info.h,
	  src/FS_Info.cc
	  src/GParted_Core.cc: Reduced FS_Info cache disk reads.

2008-12-07  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/Dialog_Partition_New.cc,
	  src.DialogFeatures.cc,
	  src/GParted_Core.cc,
	  src/Utils.cc,
	  src/Win_GParted.cc: Added lvm2 physical volume detection.

2008-12-03  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Partition_Info.cc,
	  src/Win_GParted.cc: Made text by field labels selectable.
	  - Useful for copy/paste of UUID or volume label

	* include/Utils.h,
	  src/Utils.cc: Added text selectable parameter to mk_label()

2008-12-02  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Append -svn to version for continuing development

2008-11-29  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.4.1
	  ===================================================

	* src/GParted.cc: Removed code to recognize /dev/mapper/* devices.
	  - Too many /dev/mapper/* devices listed (including LVM partitions)
	  - Roll back patch applied on 2008-10-15
	  - Reopens GParted bug #556114

	* include/FS_Info.h,
	  src/FS_Info.cc: Moved common code into new get_device_entry() method.

	* configure.in: Append -svn to version for continuing development

2008-11-28  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.4.0
	  ===================================================

2008-11-20  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in.in: Added %f to Exec line.
	  - Enables device passing with gnome-desktop-item-launch
	  - Closes GParted bug #561495

2008-11-19  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Fixed dangerous copy and paste problem.
	  - Prevent a copied partition from being pasted into an existing
	    partition.

	* src/Win_GParted.cc: Added language length conditional Undo display.
	  - If translated language is relatively long, then
	      split the "Resize/Move" toolbar button text into two lines, and
	      do not display the "Undo" button.
	  - Permits all languages to see a full toolbar at default window size.
	  - Closes GParted bug #561068

2008-11-18  Curtis Gedak  <gedakc@gmail.com>

	* include/Partition.h,
	  include/Utils.h,
	  src/Dialog_Partition_Info.cc,
	  src/Dialog_Partition_New.cc,
	  src/Dialog_Partition_Resize_Move.cc,
	  src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/GParted_Core.cc,
	  src/jfs.cc,
	  src/linux_swap.cc,
	  src/ntfs.cc,
	  src/OperationCheck.cc,
	  src/reiserfs.cc,
	  src/TreeView_Detail.cc,
	  src/Win_GParted.cc,
	  src/xfs.cc: Fixed incorrect spelling of filesystem and mountpoint.

	* src/DialogFeatures.cc: Added translator comment.
	  - Renamed button to improve clarity of meaning.
	  - Closes GParted bug #561350

2008-11-14  Curtis Gedak  <gedakc@gmail.com>

	* include/DialogFeatures.h,
	  src/DialogFeatures.cc: Improved dialog readability.
	  - Changed title Features to File System Support.
	  - Renamed button Refresh to Rescan Support.
	  - Created expander for legend and added narrative.
	  - Removed columns detect and read.
	  - Added column for Required Software.
	  - Closes GParted bugs #342682, and #353104

	* include/Utils.h, 
	  src/Utils.cc: Created method get_filesystem_software().

	* src/Win_GParted.cc: Moved menu entry
	- "Gparted->Show Features" moved to "View->File System Support".

2008-11-13  Curtis Gedak  <gedakc@gmail.com>

	* include/FS_Info.h,
	  src/FS_Info.cc,
	  src/GParted_Core.cc,
	  README: Improved read label performance with blkid cached results.
	  - When possible use blkid cached results to determine volume label.

2008-11-12  Curtis Gedak  <gedakc@gmail.com>

	* README: Updated directories and dependencies.

2008-11-11  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Partition_Info.cc,
	  src/GParted_Core.cc:  Added read and display UUID.

	* include/Partition.h,
	  src/Partition.h: Added UUID.

	* include/FS_Info.h,
	  include/Makefile.am,
	  src/FS_Info.cc,
	  src/Makefile.am:  Created class to read file system UUIDs.

2008-11-10  Curtis Gedak  <gedakc@gmail.com>

	* src/fat16.cc,
	  src/fat32.cc:  Enforced fat compliant label before writing.
	  - Trimmed trailing spaces from label upon reading.

	* include/Utils.h,
	  src/Utils.cc:  Created new method fat_compliant_label().
	  - Limit volume label to 11 characters.

2008-11-08  Curtis Gedak  <gedakc@gmail.com>

	* include/ext2.h,
	  include/ext3.h,
	  include/fat16.h,
	  include/fat32.h,
	  include/hfs.h,
	  include/hfsplus.h,
	  include/jfs.h,
	  include/linux_swap.h,
	  include/ntfs.h,
	  include/reiser4.h,
	  include/reiserfs.h,
	  include/xfs.h,
	  include/ufs.h: Renamed set_label and get_label methods.

	* src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/hfs.cc,
	  src/hfsplus.cc,
	  src/jfs.cc,
	  src/linux_swap.cc,
	  src/ntfs.cc,
	  src/reiser4.cc,
	  src/reiserfs.cc,
	  src/ufs.cc,
	  src/xfs.cc: Renamed set_label and get_label methods.
	
	* include/FileSystem.h,
	  include/GParted_Core.h,
	  include/Utils.h: Renamed set_label and get_label methods.
	
	* src/DialogFeatures.cc
	  src/FileSystem.cc,
	  src/GParted_Core.cc: Renamed set_label and get_label methods.
	  - Renamed set_label to write_label, renamed get_label to read_label.
	  - Preference is to reserve set/get for object attribute handling.

2008-11-05  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Partition_Copy.cc: Fixed copy and paste partition problem.
	  - Resolved destination partition too small on copy and paste.
	  - Added exclusion for primary partitions at the start of the disk.
	  - Closes GParted bug #556058

2008-11-04  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Progress.cc,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: Fixed some spelling mistakes

	* src/Win_GParted.cc: Added label update for paste to existing partition

2008-10-31  Curtis Gedak  <gedakc@gmail.com>

	* src/reiser4.cc,
	  README: Changed get_label() to use vol_id instead of debugfs.reiser4

	* src/GParted_Core.cc: Changed thread status messages to be unique

2008-10-30  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Added translator comments
	  - Removed ellipses from status messages in set_devices()

	* src/Win_GParted.cc: Added thread status message update to pulsebar

	* include/GParted_Core.h,
	  src/GParted_Core.cc: Added set and get thread status message methods
	  - Added thread status message updates in set_devices()

2008-10-28  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Remove std:: prefix from llabs()
	  - Fixes problem where gparted failed to build in debian on arm,
	    armel, mips, and mipsel (debian bug#499722)
	  - Thanks to Thiemo Seufer for small patch

	* src/reiser4.cc: Removed warning reading mounted reiser4 volume label
	  - Closes GParted bug #380546

2008-10-24  Curtis Gedak  <gedakc@gmail.com>

	* src/Utils.cc: Increased robustness of get_lang() function
	  - Assists with GParted bug #556965

2008-10-17  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Progress.cc: Converted more words for translation

2008-10-16  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Progress.cc: Added call to get_lang() for lang tags

	* include/Utils.h,
	  src/Utils.cc: Created function get_lang()

	* src/main.cc: Update copyright years

2008-10-15  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Enhanced to recognize /dev/mapper/* devices
	  - The move away from libparted device recognition broke
	    recognition of /dev/mapper/* devices.  Problem now fixed.
	  - Thanks to Colin Watson for the patch.
	  - Closes GParted bug #556114

2008-10-14  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Progress.cc: Enhanced detail log to pass as XHTML
	  - gparted_details.htm now passes as XHTML 1.0 Transitional
	    in the validator found at http://validator.w3.org/
	  - Thanks to Markus Elfring for the small patch.
	  - Closes GParted bug #525347

2008-10-08  Curtis Gedak  <gedakc@gmail.com>

	* autogen.sh,
	  HACKING: Changed text CVS to SVN.
	  - Thanks to Martin Capitanio

	* README: Added a dependency.
	  - Thanks to Martin Capitanio

2008-10-06  Curtis Gedak  <gedakc@gmail.com>

	* Makefile.am: Removed m4 from EXTRA_DIST
	  - 'make distcheck' fails if m4 directory is in EXTRA_DIST

2008-09-26  Curtis Gedak  <gedakc@gmail.com>

	* autogen.sh: Added check for gnome-doc-utils.make

2008-09-25  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc,
	  src/linux_swap.cc,
	  src/OperationResizeMove.cc,
	  src/xfs.cc: Add translator comments and fix spelling mistake.

2008-09-24  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Progress.cc: Added proper HTML start and finish.
	  - gparted_details.htm now passes as HTML 4.0 Transitional
	    in the validator found at http://validator.w3.org/
	  - Closes GParted bug #525347

2008-09-22  Curtis Gedak  <gedakc@gmail.com>

	* configure.in,
	  src/Win_GParted.cc,
	  src/Makefile.am,
	  makefile.am: Enabled GParted to use themed app icon (Tango theme).
	  - Thanks to Sebastian Kraft for designing the icons.
	  - Thanks to Michael Monreal for the small patch to make use of themed
	    app icon from hicolor.
	  - Closes GParted bug #350894

	* data/Makefile.am,
	  data/icons/Makefile.am,
	  data/icons/hicolor_apps_16x16_gparted.png,  
 	  data/icons/hicolor_apps_22x22_gparted.png,
	  data/icons/hicolor_apps_24x24_gparted.png,
	  data/icons/hicolor_apps_32x32_gparted.png,
	  data/icons/hicolor_apps_48x48_gparted.png,
	  data/icons/hicolor_apps_scalable_gparted.svg,
	  data/icons/svg/gparted.svg: Created files.
	  - Icons by Sebastian Kraft
	  - Small patch by Michael Monreal.

	* data,
	  data/icons,
	  data/icons/svg:  Created directories.
	  - Small patch by Michael Monreal.

	* pixmaps,
	  pixmaps/Makefile.am,
	  pixmaps/gparted.png: Removed directory and files.
	  - This directory and its contents are no longer required - see above notes.

2008-09-15  Curtis Gedak  <gedakc@gmail.com>

	* configure.in,
	  Makefile.am: Added --disable-doc flag to prevent building help docs

	* README: Added note about --disable-doc flag

2008-09-13  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Append -svn to version for continuing development

2008-09-12  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.3.9
	  ===================================================

	* src/GParted_Core.cc: Added pattern recognition for HP RAID drives
	  - E.g., device = /dev/cciss/c0d0, partition = /dev/cciss/c0d0p1

2008-09-04  Curtis Gedak  <gedakc@gmail.com>

	* include/Utils.h,
	  src/Utils.cc: Fixed display problem with percent complete messages.
	  - Some commands use cursor repositioning to display progress.
	    This cursoring does not display well within the tracking of
	    gparted details.  A newly added function will cleanup the output.
	  - Closes GParted bug #532574

2008-09-01  Curtis Gedak  <gedakc@gmail.com>

	* COPYING-DOCS: Added new file containing GFDL 1.2 license
	  - Closes GParted bug #550047

2008-08-06  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Enhanced optimal block size copy algorithm.
	  - Changed algorithm to try all block size possibilities instead of
	    stopping as soon as next larger block size took longer to copy than
	    the prior block size.  Due to anomalies in benchmark times, the
	    previous algorithm would favour smaller block sizes.
	  - Closes GParted bug #546423

	* README: Updated with new directories for GParted Manual

2008-08-05  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.h: Created show_help_dialog function to display help

	* src/Win_GParted.cc: Created show_help_dialog function to display help
	  - Replaced help dialog box with call to show_help_dialog function.
	    Initial concept for the show_help_dialog function comes from the
	    file-roller project.  The advantage to this code is that it does
	    not create a dependency on libgnomeui.
	  - Changed menu Help->Help CTRL+H to help->Contents F1

	* src/Makefile.am: Added GPARTED_DATADIR define to INCLUDES

	* autogen.sh: Added USE_COMMON_DOC_BUILD
	
	* configure.in: Added help and m4 directories, and GNOME_DOC_INIT
	
	* Makefile.am: Added help and m4 directories, and gnome-doc-utils

	* help: Created directory for future GParted Manual

	* m4: Created directory as advised for gnome-doc-util
	  - *********************************
	    Prepare for future GParted Manual
	    *********************************
	  - See "Migrating to GNOME Documentation Build Utilities"
	  http://library.gnome.org/devel/gnome-doc-make/0.12/migrating.html.en

2008-07-27  Curtis Gedak  <gedakc@gmail.com>

	* gparted.in: Added additional check for hald daemon if hal-lock exists
	  - Closes GParted bug #543730

2008-07-26  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Removed full path from gksu
	  - gksu is only used in desktop file if it is found in path

2008-07-25  Curtis Gedak  <gedakc@gmail.com>

	* src/hfs.cc: Rewrote get_label to use vol_id for hfs file system
	  - Reason:  not all hfsutils packages include hfsck (e.g. Ubuntu 7.10)

	* src/hfsplus.cc: Enhanced support for hfsplus file system
	  - Added create, get_label, and check_repair functionality
	  - Additional feature support is provided by the hfsprogs package

2008-07-23  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in.in,
	  Makefile.am,
	  configure.in: Added check for gksu for gparted menu invocation.
	  - Permits GNU/Linux distributions with gksu to prompt for root
	    password when invoked from the menu, while not hampering
	    distributions without gksu.
	  - Partially addresses bug 318557 for some GNU/Linux distributions

	* configure.in: Append -svn to version for continuing development

2008-07-10  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.3.8
	  ===================================================

2008-06-18  Curtis Gedak  <gedakc@gmail.com>

	* src/OperationResizeMove.cc: Fixed incorrectly recognized move/resizes
	  - Re-wrote logic to determine proper partition move / resize operation
	  - Closes GParted bug #438570

2008-06-15  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Enhanced snap-to-cylinder math
	  - Improved math for rounding starting sector to cylinder
	    boundaries for logical partitions, and the first primary
	    partition for MBR and GPT partition tables.
	  - Closes GParted bugs #432525, and #525137

	* include/Dialog_Base_Partition.h,
	  src/Dialog_Base_Partition.cc,
	  include/Dialog_Partition_New.h,
	  src/Dialog_Partition_New.cc: Migrated checkbutton.
	  - Moved "Round to cylinders" checkbutton from partition new
	    dialog to partition base dialog so that it may be used
	    by all inheritors (e.g., New, Copy, and Resize/Move).

2008-06-12  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc: Changed 3 grammatical errors to dashes.
	  - Closes GParted bug #533637

2008-06-10  Curtis Gedak  <gedakc@gmail.com>

	* src/main.cc: Changed wording of root privilege required warning.
	  - Closes GParted bug #534072

	* src/Dialog_Progress.cc: Added proper PO file plural handling.
	  - fixed a few spelling errors.

	* src/Win_GParted.cc: Added proper PO file plural handling.
	  - Closes GParted bug #315291

2008-05-10  Curtis Gedak  <gedakc@gmail.com>

	* README: Removed absolute requirement for hal-lock.

	* gparted.in: Enhanced script to use hal-lock only if it exists
	  - This removes the absolute requirement for hal-lock and
	    enables systems without HAL to use GParted.

	* configure.in: Removed check for hal-lock program (added 2008-05-08)

2008-05-08  Curtis Gedak  <gedakc@gmail.com>

	* README: Added note about hal-lock and HAL requirement

	* configure.in: Added check for hal-lock program

	* src/GParted_Core.cc: Added parse devices from /proc/partitions
	  - If /proc/partitions doesn't exist then use ped_device_probe_all
	  - Closes GParted bugs #351753, and #453555

2008-05-06  Curtis Gedak  <gedakc@gmail.com>

	* gparted.in: Fixed problem with command line devices being ignored
	  - This problem was introduced in version 0.3.7

	* configure.in: Append -svn to version for continuing development

2008-04-29  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.3.7
	  ===================================================

2008-04-26  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in.in: Removed gksu from exec line
	  - gksu is not supported in all major GNU/Linux distributions
	    (Fedora for one).
	  - Closes GParted bug #529622
	  - Reopens GParted bug #381557

	* README: Enhanced INSTALL information
	  - Closes GParted bug #529625

2008-04-25  Curtis Gedak  <gedakc@gmail.com>

	* README: Updated to better align with GNU coding standards

2008-04-23  Curtis Gedak  <gedakc@gmail.com>

	* README: Updated installation notes and distribution notes

2008-04-21  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Base_Partition.cc,
	  src/Dialog_Partition_New.cc: Fixed 1 TB partition limit bug
	  - Fixed problem with spinbutton math that limited partition size
	    to a maximum just less than 1 TB.
	    New limit is just less than 1024 TB.
	  - Closes GParted bug #524948

	* Makefile.am: Enhanced for new calling script gparted
	  - Added gparted script installation in sbin
	  - Added installdir parsing for gparted and gparted.desktop

	* gparted.desktop.in: Renamed gparted.desktop.in
	                           to gparted.desktop.in.in
	  - This is to permit installdir parsing in gparted.desktop

	* gparted.in: Added new calling script gparted
	  - This is to permit using hal-lock to acquire device
	    locks to prevent automounting prior to executing gpartedbin.
	  - Closes GParted bug #324220
	  - Thanks to Deji Akingunola for the hal-lock invocation idea

	* src/GParted_Core.cc: Removed gparted-disable-automount.fdi handling
	  - Removed signal handler patch from 2008-01-28
	  - Removed initial work on disabling automount from 2006-08-09
	  - /usr/share/hal/fdi/policy/gparted-disable-automount.fdi is
	    no longer created.
	  - This is to permit preferred alternative of using hal-lock.

	* src/Makefile.am: Renamed gparted binary to gpartedbin
	  - This is to permit a calling script to be named gparted.

2008-04-20  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Disklabel.cc: Improved ability to translate text
	  - Closes GParted bug #529063

2008-04-18  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Disklabel.cc,
	  src/Win_GParted.cc: Changed device menu item and description
	  - Menu text changed from "set disklabel..."
	    to "Create Partition Table..."
	  - Significant change in the wording to increase awareness that
	    setting a disk label (creating a partition table) will
	    ERASE ALL DATA on the disk.
	  - Removed double confirmation of partition table creation
	  - Closes GParted bug #422070 

2008-04-14  Curtis Gedak  <gedakc@gmail.com>

	* Makefile.am,
	  configure.in,
	  doc/,
	  doc/Makefile.am,
	  doc/gparted.8: Added manual page documentation
	  - Command line response for GParted bug #329584

2008-04-09  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in: Updated to align with standards
	  - Adjusted entries to align with desktop entry specification
	    - Closes GParted bug #518975
	  - Added gksu to Exec line in front of gparted
	    - Closes GParted bug #381557
	  - Updated to align with Human Interface Guidelines
	    - Closes GParted bug #440012

	* src/Makefile.am: Moved gparted install to sbin instead of bin
	  - Closes GParted bug #509495

	* MAINTAINERS: Added ldetrogoff

2008-04-08  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Partition_Label.cc: Increase dialog box size

	* src/linux_swap.cc: Enhanced to work with different versions of vol_id

2008-04-07  Marcel Telka  <marcel@telka.sk>

	* MAINTAINERS: New file (bug #524276).

2008-04-03  Curtis Gedak  <gedakc@gmail.com>

	* configure.in,
	  autogen.sh,
	  po/LINGUAS: Enhanced to use po/LINGUAS for LINGUAS
	  - Closes GParted bug #467459
	  - Thanks to Christian Persch for this patch

2008-04-01  Curtis Gedak  <gedakc@gmail.com>

	* Makefile.am: Removed distclean target enhancements from 2008-02-05
	  - use "make dist" to create a distribution archive file

2008-03-31  Curtis Gedak  <gedakc@gmail.com>

	* src/Utils.cc: Ensure hour portion of time is always displayed
	  - Closes GParted bug #438590

	* src/TreeView_Detail.cc: Removed text_color hard coding
	  - Removed hard coding of Partition and Filesystem text_color
	    which was based on if partition was TYPE_UNALLOCATED.
	  - Removed hard coding of Mount text_color which was based
	    on if partition was busy.  Lock symbol provides this indicator.
	  - Closes GParted bug #413810

	* src/reiser4.cc,
	  src/reiserfs.cc: Tighten get_label regular expression

2008-03-26  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.3.6
	  ===================================================

2008-03-25  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: Added 'sk' to ALL_LINGUAS.
	  Also added 'ko' and 'si' to ALL_LINGUAS.
	
2008-03-21  Curtis Gedak  <gedakc@gmail.com>

	* include/OperationLabelPartition.h,
	  src/OperationLabelPartition.cc: Updated to display label change
	  - Label change now shown prior to apply button being pressed

	* src/Win_GParted.cc:  Added partition duplication for use with UNDO

	* src/Dialog_Partition_Label.cc: Changed label ADD button to OK
	  - Added trim function to get_new_label()

2008-03-19  Curtis Gedak  <gedakc@gmail.com>

	* src/linux_swap.cc: Fill in get_label() functionality using vol_id

	* src/reiser4.cc: Enhanced get_label()
	  - Read partition label up to the first exclamation mark.
	    The exclamation mark is displayed by debugfs.reiser4 when
	    the label is the maximum length of 16 characters.

	* src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/hfs.cc,
	  src/jfs.cc,
	  src/linux_swap.cc,
	  src/ntfs.cc,
	  src/reiser4.cc,
	  src/reiserfs.cc,
	  src/xfs.cc: Added partition labelling on filesystem creation

2008-03-18  Curtis Gedak  <gedakc@gmail.com>

	* include/Dialog_Partition_New.h,
	  src/Dialog_Partition_New.cc: Added partition label entry text box

	* src/jfs.cc,
	  src/ntfs.cc,
	  src/reiserfs.cc,
	  src/xfs.cc: Filled in set_label() functionality

2008-03-12  Curtis Gedak  <gedakc@gmail.com>

	* src/fat16.cc,
	  src/fat32.cc: Filled in set_label() functionality

	* src/Win_GParted.cc: trim partition label after input accepted

	* include/Utils.h,
	  src/Utils.cc: Added trim() function
	  - removes leading and trailing whitespace from a string

2008-03-06  Curtis Gedak  <gedakc@gmail.com>

	* include/DialogFeatures.h,
	  src/DialogFeatures.cc: Changed Read_Label to Label

2008-03-05  Curtis Gedak  <gedakc@gmail.com>

	* include/ext2.h,
	  include/ext3.h,
	  include/fat16.h,
	  include/fat32.h,
	  include/hfs.h,
	  include/hfsplus.h,
	  include/jfs.h,
	  include/linux_swap.h,
	  include/ntfs.h,
	  include/reiser4.h,
	  include/reiserfs.h,
	  include/ufs.h
	  include/xfs.h,
	  include/filesystem.h,
	  include/utils.h,
	  src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/hfs.cc,
	  src/hfsplus.cc,
	  src/jfs.cc,
	  src/linux_swap.cc,
	  src/ntfs.cc,
	  src/reiser4.cc,
	  src/reiserfs.cc,
	  src/ufs.cc
	  src/xfs.cc: Added set_label() function stub
	  - Filled in set_label for ext2 and ext3
	
	* include/Makefile.am,
	  include/GParted_Core.h,
	  include/Operation.h,
	  include/OperationLabelPartition.h,
	  src/Makefile.am,
	  src/GParted_Core.cc,
	  src/OperationLabelPartition.cc: Created operation label partition

2008-03-04  Curtis Gedak  <gedakc@gmail.com>

	* include/Makefile.am,
	  include/Win_GParted.h,
	  include/Dialog_Partition_Label.h,
	  src/Makefile.am,
	  src/Win_GParted.cc,
	  src/Dialog_Partition_Label.cc: Created partition label menu and dialog

	* src/xfs.cc: Enhanced to read xfs labels while filesystem is mounted
	  - Thanks to Gerald Neil for the tip about adding the -r flag.

2008-02-19  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Progress.cc: Fixed two English spelling mistakes 

	* src/Dialog_Partition_Info.cc: Moved display of label closer to path

	* src/fat16.cc,
	  src/fat32.cc: Changed to use new MTools temporary file functions

	* include/Utils.h,
	  src/Utils.cc: Added create_mtoolsrc_file() and
	    delete_mtoolsrc_file() to handle MTools temporary file

2008-02-16  Curtis Gedak  <gedakc@gmail.com>

	* src/Dialog_Partition_Info.cc: Added display of partition label

2008-02-14  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Added my name to list of authors

	* src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/jfs.cc,
	  src/ntfs.cc,
	  src/reiser4.cc,
	  src/reiserfs.cc,
	  src/xfs.cc: Fixed bug in get_label()
	  - now returns full text of label for labels that include spaces.

	* include/Utils.h,
	  src/Utils.cc: Added regexp_label() to extract partition label text

2008-02-12  Curtis Gedak  <gedakc@gmail.com>

	* src/fat16.cc,
	  src/fat32.cc: Added get_label() support using mtools mlabel command

2008-02-07  Curtis Gedak  <gedakc@gmail.com>

	* src/GParted_Core.cc (GParted_Core::init_maps): Fix max path length
	  - GParted would crash if realpath() returned more than 255 chars
	  - Closes GParted bug #481768
	  - Thanks to Deji Akingunola for this suggestion.
	  (GParted_Core::read_mountpoints_from_file): Extend length of C strings
	  - Change C strings from 255 to 4096 (current PATH_MAX in limits.h)
	    to reduce chance of buffer overrun.
	  - PATH_MAX name not used because manpage appears to indicate
	    inconsistencies.

2008-02-05  Curtis Gedak  <gedakc@gmail.com>

	* Makefile.am: Enhanced distclean target
	  - Now removes autom4te.cache, .svn, and .cvsignore
	  - Thanks to Francois Dupoux for this suggestion.

2008-02-01  Curtis Gedak  <gedakc@gmail.com>

	* configure.in: gparted-0.3.5
	  ===================================================

2008-02-01  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in: Rolled back HIG code changes to 0.3.3
	  - Reopens bugs #440012, and #381557
	  - Rolls back debian patch 01_fix-desktop.patch
	  - moved config.in: gparted-0.3.5 entry from 2008-01-30
	    to 2008-02-01 to improve readability of ChangeLog entries

2008-01-29  Curtis Gedak  <gedakc@gmail.com>

	* gparted.desktop.in: Updated to align with GNOME Human
	                      Interface Guidelines 2.0
	  - Closes bug #440012

2008-01-28  Curtis Gedak  <gedakc@gmail.com>

	* src/Win_GParted.cc: Applied debian patch 04_Win_GParted.cc.diff
	  - Fixed "crashes when rescanning devices after any operation",
	    closes: #446522. Patch by Denis Sirotkin <fechiny@gmail.com>

	* src/GParted_Core.cc: Applied debian patch
	                       03_fdi_robustification.patch
	  - Install a signal handler for cleaning up the automount disabling
	     FDI, so that it will be cleaned up on program crashes, too.
	  - Use storage.automount_enabled_hint instead of volume.ignore for the
	    automount disabling FDI. That way, the new drives will at least
	    appear in GNOME and the user can mount them manually.
	  - Patch by Martin Pitt <martin.pitt@ubuntu.com>
	  - LP: #134712
	  - Closes: 434268

	* include/Utils.h,
	  include/OperationDetail.h: Applied debian patch
	                             02_fix-build-failure-with-g++-4.3.patch
	  - Fix build failures with g++-4.3. LP: #138584

	* gparted.desktop.in: Applied debian patch 01_fix-desktop.patch
	  - don't specify the encoding that's deprecated, update the categories
	    and set the translation domain (LP: #145202)
	  - Changes name to `Partition Editor`
	  - Enables gksu to run gparted with

2007-10-14  Yannig Marchegay  <yannig@marchegay.org>

	* configure.in: Added 'oc' to ALL_LINGUAS.

2007-08-10  Inaki Larranaga Murgoitio  <dooteo@zundan.com>

	* configure.in: Added 'eu' to ALL_LINGUAS.

2007-02-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: gparted-0.3.4
	  ===================================================

2007-01-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: added a check to see wether a device is 'real'
	  or not. (thanks to Fran�ois Dupoux for the patch)

2006-12-19  Theppitak Karoonboonyanan  <thep@linux.thai.net>

	* configure.in: Added 'th' (Thai) to ALL_LINGUAS.

2006-12-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Device.h,
	  include/Dialog_Base_Partition.h,
	  src/Dialog_Base_Partition.cc: replaced 'long' with 'Sector' to
	  prefent overflows with really large devices.

2006-12-06 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: gparted-0.3.3
	  ===================================================

2006-12-05 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed 'Could not detect file system.' error
	  with fat and hfs filesystem when performing a move to the left. 
	  (thanks to 'the Bogerds' for borrowing me an usbstick ;) )

2006-12-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: gparted-0.3.2
	  ===================================================

2006-12-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Partition.cc: fixed issue with overloaded ==

2006-12-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  include/GParted_Core.h,
	  src/Dialog_Progress.cc,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: added libparted version string to details
	  export.

2006-11-26 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/Win_GParted.cc: fixed bug with copying partition to a disk
	  without disklabel. Also added some FIXME's.
	
2006-11-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Makefile.am,
	  include/Operation.h,
	  include/Win_GParted.h,
	  src/GParted_Core.cc,
	  src/Makefile.am,
	  src/Win_GParted.cc,
	  include/OperationCheck.h (new),
	  src/OperationCheck.cc (new): added 'check' operation. The
	  functionality was already there, but it was not possible yet to
	  activate it from the gui.

2006-11-25  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>
	
	* configure.in: Add "zh_HK" to ALL_LINGUAS.

2006-11-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed rare bug with modifying logical
	  partitions. (#368199)

2006-11-23 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: fixed issue with libparted detection (#330776)
	* src/GParted_Core.cc: add FIXME

2006-11-08  Matic Zgur  <mr.zgur@gmail.com>

	* configure.in: Added sl (Slovenian) to ALL_LINGUAS.

2006-11-01  Kjartan Maraas  <kmaraas@gnome.org>

	* configure.in: Added nb to ALL_LINGUAS.

2006-10-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: gtk+-2.10 seems to return the last valid
	  iterator if get_iter is executed with an invalid treepath. This is
	  different from gtk+-2.8 and gave some problems in the
	  operationdetails. I added a check to make it work in both
	  situations.

2006-10-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: only add mountpoints and paths if they exist
	* src/reiser4.cc: don't show '<none>' if volumelabel is empty

2006-10-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core: Replaced std::abs with llabs (see #357691)
	* src/hfs.cc,
	  src/xfs.cc: added support for reading of volumelabel
	* src/reiserfs.cc: added Fixme

2006-09-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: Fix libparted detection in case --as-needed flag is
	  passed (#357679)

2006-09-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/jfs.cc: added support for reading of volumelabel

2006-09-23 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/DialogFeatures.h,
	  src/DialogFeatures.cc: added 'Read Label' info

2006-09-23 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/reiser4.cc
	  src/reiserfs.cc: added support for reading of volumelabel

2006-09-23 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/ntfs.cc: added support for reading of volumelabel

2006-09-17 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* added popupmenu to operationslist and did some (higrelated) cleanups

2006-09-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc: trivial cleanups

2006-09-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/DialogFeatures.cc: higgiefied the dialog a bit (#353104)

2006-09-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: some small changes to make the GUI more
	  consistent (#353140)

2006-09-14 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: changed libpartedcheck a bit. from now on we declare
	  the min. version as variable in one place. This finally closes #330776

2006-09-14 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/ext2.cc,
	  src/ext3.cc: fixed a couple of issues with reading of volumelabels
	  (#338528)
	
2006-09-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: finally fixed problem with 'disappearing'
	  devicenodes by using udevsettle (#352744)

2006-09-12 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* added support for reading volumelabels. Atm we only read ext2/3, but
	  the infrastructure for adding the other filesystems is in place.
	  It's simply a matter of finding the right commands and parsing the
	  output. (see #338528 for more info)

2006-09-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.3.1
	  ===================================================

2006-09-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: show correct statusmessage when performing the
	  readonly test.

2006-09-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: reverted back to parted probing after i heard
	  patches to fix some issues with it are underway. (skipping of floppy
	  and cdrom)
	* src/reiser4.cc,
	  src/reiserfs.cc: added --quiet to the fschecks to prevent the
	  detailswindow from dying under the load. I should find a solution
	  for that anyway.

2006-09-10 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: display total sector info in copy_filesystem()

2006-09-10 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: make sure progressfraction stays between 0.0
	  and 1.0
	* include/GParted_Core.h,
	  src/GParted_Core.cc: implemented rollback in case of failed move of
	  overlapping filesystems. Together with the readonly test moving
	  should be quite save now :)

2006-09-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/fat16.cc,
	  src/fat32.cc: return true if filesystem was succesfully modified by
	  dosfsck.

2006-09-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc: Show number of warnings after all operations
	  are completed. Also urge people to save their details in case of
	  error.

2006-09-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Frame_Resizer_Base.h,
	  src/Frame_Resizer_Base.cc,
	  src/Frame_Resizer_Extended.cc,
	  src/GParted_Core.cc: trivial 'breakfast cleanups' :) 

2006-09-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/jfs.cc,
	  src/ntfs.cc,
	  src/reiser4.cc,
	  src/reiserfs.cc,
	  src/xfs.cc: be a bit more verbose on error in set_used_sectors()

2006-09-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: declared char * buf global, so it can be
	  initialized in copy_blocks(). This is a lot more efficient than
	  initializing it on every copy_block()

2006-09-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: skip resize/move of partition/filesystem if
	  there are no changes.

2006-09-08  Pema Geyleg  <pgeyleg@gmail.com>

	* configure.in: Added dz to ALL_LINGUAS

2006-09-07 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/Partition.h,
	  src/Partition.cc: added test_overlap()
	* include/GParted_Core.h,
	  src/GParted_Core.cc: perform a readonly testrun before the actual
	  move if destination overlaps source.

2006-09-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: parse /proc/partitions to find devices instead
	  of using ped_device_probe_all()

2006-09-06 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: finally added a decent check for libparted (see also
	  #330776)

2006-09-04 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.3
	  ===================================================

2006-09-04 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: update ntfsbootsector after first sector has
	  changed. This is necessary to let windows boot correctly afterwards.
	* src/ntfs.cc: added FIXME

2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: simplified algorithm to get remaining time

2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: check if dest >= src before starting a copy

2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed an issue with copying to unallocated
	  space. It works fine now, but this entire copy operation breaks
	  consistency a bit. I should take a look at that when i have some
	  more time.

2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: added progressfeedback to Delete()

2006-09-03 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: more fixes related to moving..

2006-09-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: small menu changes

2006-08-31 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fix errormessage

2006-08-31 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: tried to fix a couple of errors with moving to
	  the right with overlap (thanks Larry for hunting ;) )
	  Although everything seems to work well i'm still not sure if
	  everything is 100% ok.
	  I guess everything could use some more testing, which is exactly
	  what i plan to do this weekend :)

2006-08-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: usability stuff + trivial fix (#353109, #353111)

2006-08-27 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/DialogFeatures.h,
	  src/DialogFeatures.cc: added legend (#353104)
	* src/fat32.cc: added FIXME

2006-08-27 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/ntfs.cc: replaced ntfscluster with ntfsresize (see #350789)

2006-08-27 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* happy 24th birthday Johannes! :^)
	* include/GParted_Core.h,
	  src/GParted_Core.cc: restructured resize_move() to be more robust.
	  This will hopefully tackle a couple of issues which came up during
	  the public testing.

2006-08-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: improvements to probe and copy stuff.

2006-08-24 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/GParted_Core.cc: use Glib::timer instead of std::time stuff for
	  the probing, this is more accurate since the resolution is much
	  higher (microseconds instead of seconds)

2006-08-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/OperationDetail.cc: catch markup exceptions
	* src/Utils.cc: cleanups 

2006-08-21 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Utils.h,
	  src/Utils.cc: added format_time()
	* include/OperationDetail.h,
	  src/OperationDetail.cc: keep track of elapsed time between
	  STATUS_EXECUTE and STATUS_[ERROR|SUCCES]
	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc: show elapsed time in the details per (sub)
	  process
	* src/GParted_Core.cc: use Utils::format_time() 

2006-08-21 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/FileSystem.cc: added nice -n 19, so that all extensive
	  filesystemoperations will be 'nice' :)
	* src/OperationDetail.cc,
	  src/Utils.cc: cleanups 

2006-08-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: enabled set_do_overwrite_confirmation() for
	  the detailsfile. 
	* configure.in: raised gtkmm dependency from 2.6 to 2.8

2006-08-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: replaced hardcoded menu and toolbar indices with
	  variables. This is far more flexible and reliable.

2006-08-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: fixed some issues with combi move+shrink on
	  fat* and hfs* filesystems. 
	  Also call wait_for_node() from commit() if 'node' was provided.

2006-08-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Resize_Move.cc: due to some restrictions it was
	  no longer possible to shrink swap filesystems. fixed.

2006-08-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/linux_swap.cc: small fix with moving of linux-swap (which seems
	  pretty useless to me :^) )

2006-08-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* changed progressfeedbackhandling a bit. Because this affected
	  OperationDetail i had to make changes in almost every file.

2006-08-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: added 'time remaining' to progressfeedback.

2006-08-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: created set_progress_info() (i actually planned
	  on adding some time remaining stuff, but xfiles is waiting ;) )

2006-08-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed small issue with lp_partition ->geom
	  stuff sometimes losing values when going out of scope.

2006-08-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: couple of cleanups in operationhandling and
	  initalizing of p_filesystem.

2006-08-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Makefile.am: small fix to pass 'make distcheck'

2006-08-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: did some work on disabling of automounting of
	  removable drives. The current method is not entirely to my liking
	  but it seems to work.

2006-08-08 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/Dialog_Partition_Resize_Move.cc: fixed small issue with
	  shrinking of a new (virtual) partition

2006-08-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* implemented some stuff to find a good blocksize to use for
	  copy/move. Actually i'm not really happy with it, because probing
	  seems suboptimal, but it's better than nothing. As soon as i have
	  some time i should do some research on the subject to find a better
	  solution.
	  
2006-08-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: construct operations in the activate*()
	  functions instead of in Add_Operation(). This approach allows for
	  more customization of operations.

2006-08-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: made set_partition_type() a bit more verbose
	  and did some cleanups.

2006-08-01 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/Partition.h,
	  src/Partition.cc: added get_sector()
	* src/GParted_Core.cc: use new Partition::get_sector()

2006-08-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Copy.cc,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: fixed some issues when manipulating a just
	  copied partition. (see also #349513)

2006-07-30 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* improved errorhandling a bit. At the initialscan we store
	  errors/warnings now in a list per partition and show the in the
	  partitioninfo dialog.
	  While executing an operation we collect all libparted exceptions in
	  a list and attach this list to the operationdetails when everything
	  is done.

2006-07-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* renamed some enums

2006-07-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed a couple of small errors in the
	  copy algorithm (which is closely related to moving)

2006-07-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed a couple of small errors in the
	  move algorithm

2006-07-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* fixed Pango markup problems in operationdetails
	* restructured OperationDetail
	* renamed some enums for improved readability of the source

2006-07-23 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/FileSystem.h,
	  include/GParted_Core.h,
	  src/FileSystem.cc,
	  src/GParted_Core.cc,
	  src/ext2.cc,
	  src/ext3.cc,
	  src/ntfs.cc,
	  src/reiserfs.cc: removed cylindersize buffering during resize from
	  the filesystems. It is not needed anymore now we calculate the new
	  position before calling this.
	  Also added some extra progressfeedback in the core

2006-07-23 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: more work on moving/resizing sequence

2006-07-23 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed issue with resize/move of extended
	  partitions

2006-07-23 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/Win_GParted.cc: added FIXME:
	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/fat32.cc: decoupled libparted partition and filesystemresizing.
	  This resulted in a much more consistent core. This also affected
	  several other aspects of resizing/moving in a positive way.

2006-07-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: FIXME business
	* src/Win_GParted.cc: only snap to cylinder if operation is != DELETE
	  or FORMAT

2006-07-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: perform some checks before adding a new
	  operation to the list.
	* src/Partition.cc: made get_length() a bit safer

2006-07-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: added FIXME
	* src/GParted_Core.cc: removed FIXME

2006-07-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  include/Operation.h,
	  src/Dialog_Progress.cc,
	  src/GParted_Core.cc: show warning in progressfeedback if a certain
	  action is n/a. Of course we only allow these actions if the results
	  are non-lethal.

2006-07-19 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* enabled move support for all the filesystems. Also made some small
	  changes to the logic which determines if copy is allowed.

2006-07-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: added some progressfeedback 

2006-07-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/xfs.cc: fixed potential crasher in read algorithm (#347914)

2006-07-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: worked a bit on progressfeedback..
	* include/Partition.h: added FIXME
	
2006-07-17 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc,
	  include/GParted_Core.h,
	  src/GParted_Core.cc: implemented snap to cylinder algorithm.
	  Although the algorithm is very simple, it seems to work perfectly.
	  However, some additional testing is required.

2006-07-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* lots of fixes and improvements (mostly move-related)

2006-06-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: some more work on the order of operations when
	  performing a move (made use of maximize_filesystem() ).

2006-06-21  Raivis Dejus  <orvils@gmail.com>

	* configure.in: Added Latvian 'lv' entry.

2006-06-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: finalized the order of operations when
	  performing a move.

2006-06-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: use new copy_block() in copy_filesystem()

2006-06-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: renamed resize_partition to
	  resize_move_partition to better reflect its functionality.

2006-06-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: did more work on moving

2006-06-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: some more cleanups, should be finished now :)

2006-06-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* restructured the core a bit, over time it had become very messy.

2006-06-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* more cleanups in the core and the fs'es (these changelogs are
	  getting boring ;^) )

2006-06-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* cleanups in the core and the fs'es (resize)

2006-06-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* cleanups in the core and the fs'es (check/repair)

2006-06-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/GParted_Core.cc: use new create_filesystem() in format()

2006-06-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* cleanups in the core and the fs'es (create)

2006-06-04 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: removed 'EXPERIMENTAL' from move-message to
	  prevent incorrect translations.

2006-05-31 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/ext2.cc: added movesupport, atm in experimental state and needs
	  lots of cleaning. only enabled for ext2, but should work for all
	  filesystems.
	* src/DialogFeatures.cc: added alternating rowcolours (see #342682)

2006-05-27 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Partition_Copy.h,
	  include/GParted_Core.h,
	  include/OperationCopy.h,
	  include/Win_GParted.h,
	  src/Dialog_Partition_Copy.cc,
	  src/GParted_Core.cc,
	  src/OperationCopy.cc,
	  src/Win_GParted.cc: made blocksize settable by the user.

2006-05-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed typo (#343015)

2006-05-25 Arangel Angov <ufo@linux.net.mk>

	* Updated mk.po, Macedonian translation.

2006-05-24 Takeshi AIHANA <takeshi.aihana@gmail.com>

	* configure.in: Added 'ja' (Japanese) to ALL_LINGUAS.

2006-05-23 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* Use ped_device_read and ped_device_write instead of 'dd' to copy
	  filesystems.
	  Modified progressdetails to provide more detailed feedback about a
	  process.
	  Basicly these were all changes to the infrastructure to make the
	  incorporation of the 'move-code' a bit easier. 
	
	  ( sorry, not in the mood to list all affected files ;) 

2006-05-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.2.5
	  ===================================================

2006-05-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: updated copyrightinfo

2006-05-02 Pawan Chitrakar <pchitrakar@gmail.com>

	* ne.po: Added ne ALL_LINGUAS

2006-04-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: hide dialogs after setting new disklabel

2006-04-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: creating a new partition on a BSD partitiontable
	  failed, causing a segfault when setting the partitiontype. fixed.

2006-04-05 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Copy.cc: only allow growing of copy if there is
	  grow support for the filesystem.
	* src/reiser4.cc: added support for copying reiser4 filesystems

2006-04-05 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/GParted_Core.cc: modified warning
	* src/hfsplus.cc: added support for shrinking and copying hfs+
	  filesystems

2006-04-05 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Resize_Move.cc,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc,
	  src/hfs.cc: added support for shrinking hfs filesystems 

2006-04-05 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/DialogManageFlags.cc: disabled resizing of this dialog
	* include/DialogFeatures.h,
	  include/Makefile.am,
	  include/Win_GParted.h,
	  src/DialogFeatures.cc,
	  src/Makefile.am,
	  src/Win_GParted.cc: renamed 'Filesystems' to 'Features' in the
	  featuredialog to better reflect the actual functionality
	* include/Dialog_Filesystems.h,
	  src/Dialog_Filesystems.cc: removed

2006-04-04 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.2.4
	  ===================================================

2006-04-04 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/GParted_Core.cc: remove non-existent devices from
	  disabled_automount_devices at every rescan.

2006-04-04 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/GParted_Core.cc: store libparted error in Partition::error if
	  reading the used/unused space failed.

2006-04-03 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/Dialog_Filesystems.h,
	  src/Dialog_Filesystems.cc: added column 'check'
	* include/GParted_Core.h,
	  src/GParted_Core.cc: use halproperty
	  'storage.automount_enabled_hint' instead of pmount to disable
	  automounting.
	  
2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: improved disabling of automounting. It's still
	  somewhat crude, but right now it's ok for some semi-public testing.
	  I'll do some cleanups tomorrow morning.
	* src/Dialog_Progress.cc: added FIXME

2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: an initial solution for the automount problem.
	  I still need to add something to prevent just created partitions from
	  getting mounted. (see #324220 for more info)

2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Filesystems.h,
	  include/GParted_Core.h,
	  include/Makefile.am,
	  include/ufs.h,
	  src/GParted_Core.cc,
	  src/Makefile.am,
	  src/ufs.cc: added ufs filesystemclass

2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: override Gtk::Window::on_show instead of
	  connecting to signal_show()
	* include/Dialog_Filesystems.h,
	  src/Dialog_Filesystems.cc: added columns 'detect' and 'read'

2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Utils.h,
	  src/Utils.cc: added convenience function
	* src/DialogManageFlags.cc,
	  src/Win_GParted.cc: cleanups

2006-04-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/DialogManageFlags.h,
	  src/DialogManageFlags.cc,
	  src/Win_GParted.cc: improved behaviour of flagmanagementdialog.
	  
2006-04-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/OperationResizeMove.cc: fixed another issue in
	  apply_to_visual(), this time with resizing/moveing the extended
	  partition.

2006-03-31 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: trivial cleanups
	* src/OperationResizeMove.cc: fixed a glitch in apply_to_visual()
	* src/ext2.cc,
	  src/ext3.cc: accept returnvalues 0, 1 and 2 instead of 0 and 1
	  
2006-03-31 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/GParted_Core.h,
	  src/GParted_Core.cc: let create_empty_partition() return a boolean
	  instead of an integer.

2006-03-31 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/DialogManageFlags.h,
	  include/GParted_Core.h,
	  include/Makefile.am,
	  include/Utils.h,
	  include/Win_GParted.h,
	  src/DialogManageFlags.cc,
	  src/GParted_Core.cc,
	  src/Makefile.am,
	  src/Win_GParted.cc: add 'flag management' (#330453)

2006-03-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h,
	  src/Partition.cc: added set_used() and operator!=
	* src/Dialog_Partition_Copy.cc,
	  src/GParted_Core.cc,
	  src/OperationCopy.cc,
	  src/Win_GParted.cc: it's now possible to copy from partition to
	  partition. (before this it was only possible to copy to unallocated
	  space)

2006-03-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: fixed another minor memleak (yeah i'm playing
	  with valgrind ;) )

2006-03-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: it appeared i had to free the result of
	  ped_partition_get_path in order to prevent a memleak.

2006-03-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/OperationCopy.cc: name a copied partition 'copy of <source>'.

2006-03-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.2.3
	  ===================================================

2006-03-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: removed testdata
	
2006-03-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* trivial cleanups

2006-03-27 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc: made icon behaviour more intelligent
	* src/GParted_Core.cc: small improvement in open_device_and_disk()

2006-03-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: made some small adjustments to devicechecks.

2006-03-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: sort devices alphabetically by default.

2006-03-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/DrawingAreaVisualDisk.cc: prevented a possible segfault at
	  startup. Thanks to LarryT for finding this.

2006-03-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* lots of cleanups in operationhandling. This resulted in cleaner/less
	  code and the fixing of some longstanding issues.

2006-03-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/DrawingAreaVisualDisk.h,
	  src/DrawingAreaVisualDisk.cc: fixed a few issues with
	  selecting/activating partitions.
	* include/Utils.h,
	  src/Utils.cc,
	  src/Dialog_Disklabel.cc,
	  src/Dialog_Partition_Info.cc (mk_label): improved support for
	  aligment.
	* src/Win_GParted.cc: fixed a small alignmentissue in the devices
	  submenu.

2006-03-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc,
	  src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/jfs.cc,
	  src/ntfs.cc,
	  src/reiserfs.cc: fixed issues with copying (see also #335004)
	* include/Operation.h,
	  src/Operation.cc: cleanups + added FIXME
	* include/Partition.h,
	  src/Partition.cc: added clear_mountpoints()
	* src/DrawingAreaVisualDisk.cc: added FIXME
	
2006-03-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/DrawingAreaVisualDisk.h,
	  src/DrawingAreaVisualDisk.cc: another change to highlighting of
	  selected partition.
	* include/Partition.h,
	  src/Win_GParted.cc: deal properly with just formatted partitions
	* src/Operation.cc: added FIXME

2006-03-17 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: moved comment to correct position
	* src/Win_GParted.cc: fixed issues with mountpoints containing
	  underscores and/or spaces.
	  
2006-03-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: fixed visual feedback while mounting a partition

2006-03-16 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/Win_GParted.h,
	  src/Win_GParted.cc: added submenu with mountpoints to 'mount' in
	  partitionmenu. (see also #330327)

2006-03-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* compose/.cvsignore: added *.swp
	* compose/README: corrected url

2006-03-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/ext2.cc,
	  src/ext3.cc,
	  src/fat16.cc,
	  src/fat32.cc,
	  src/jfs.cc,
	  src/ntfs.cc,
	  src/reiser4.cc,
	  src/reiserfs.cc,
	  src/xfs.cc: changed statusmessage, fixed issue with exit_status and
	  tested/confirmed succesfull usage of Partition::get_path() in
	  Set_Used_Sectors() of all filesystems.
	  
2006-03-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Device.h,
	  src/Device.cc: overloaded == and !=
	* src/Win_GParted.cc: cleanups

2006-03-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Info.cc,
	  src/DrawingAreaVisualDisk.cc: cleanups

2006-03-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h,
	  src/Dialog_Partition_Info.cc,
	  src/GParted_Core.cc,
	  src/Partition.cc,
	  src/TreeView_Detail.cc,
	  src/Win_GParted.cc: Made Partition::mountpoints private
	  
2006-03-14 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* changed the way devices and partitions store their devicepaths.
	  Instead of holding a 'realpath' and a symbolic path we store paths
	  in a list. This allows for improved detection of mountpoins, free
	  space, etc..

	  Also fixed a nasty bug which showed up when you copy a partition
	  from one device to another. (thanks to mario for the report)

2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Makefile.am,
	  src/Makefile.am: sorted filelistings.
	  
2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: only allow 'swapon' on real partitions
	
2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: added basic support for mounting unmounted
	  partitions on mountpoints found in /etc/fstab

2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/DrawingAreaVisualDisk.cc: changed MIN_SIZE from static 20 to
	  BORDER * 2 + 2 
	 
2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/DrawingAreaVisualDisk.h,
	  include/Makefile.am,
	  include/Win_GParted.h
	  src/DrawingAreaVisualDisk.cc,
	  src/Makefile.am
	  src/Win_GParted.cc: removed the frame from the visualdiskwidget and
	  changed some visual details. Also changed visual representation of
	  selected partition. The latter might be considered as a work in
	  progress.
	* include/FrameVisualDisk.h,
	  src/FrameVisualDisk.cc: Removed.
	  
2006-03-07 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* src/Dialog_Partition_Copy.cc,
	  src/Dialog_Partition_Resize_Move.cc: cleanups

2006-03-07 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/GParted_Core.h,
	  include/TreeView_Detail.h,
	  src/GParted_Core.cc,
	  src/TreeView_Detail.cc: show greyed-out mountpoint of unmounted
	  partitions in the treeview as an improved way to identify
	  partitions. (#333027)
	* src/Win_GParted.cc: cleanups
	
2006-03-06 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc: support showing of warning icon even when a
	  partition is mounted.

2006-03-06 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: made message about max. primary partitions a bit
	  more informative.

2006-03-05 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/GParted_Core.h,
	  src/GParted_Core.cc: extended scan for mountpoints (see #333370)
	  
2006-03-05 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Info.cc,
	  src/GParted_Core.cc: fixed crasher with busy partition without
	  mountpoint (#332983)
	* src/Win_GParted.cc: added FIXME
	
2006-03-05  Artur Flinta  <aflinta@cvs.gnome.org>

	* configure.in: Added "pl" to ALL_LINGUAS

2006-03-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/FrameVisualDisk.h,
	  src/FrameVisualDisk.cc: improved the algorithm to deal with lost
	  pixels after seeing some problems with rather insane
	  partitiontables.
	* src/Dialog_Partition_Info.cc: minor cleanup
	* src/GParted_Core.cc: show error in partitioninfo if statvfs fails
	* src/TreeView_Detail.cc: added FIXME
	
2006-03-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Base_Partition.cc,
	  src/FrameVisualDisk.cc: added FIXME
	* src/Win_GParted.cc: force processing of all pending Gtk::Main events
	  after Refresh_Visual. This fixes an issue with incorrect displayed
	  Visual Partition Display.
	
2006-03-01 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Frame_Resizer_Base.h,
	  include/Frame_Resizer_Extended.h,
	  src/Dialog_Base_Partition.cc,
	  src/Dialog_Partition_Copy.cc,
	  src/Dialog_Partition_New.cc,
	  src/Dialog_Partition_Resize_Move.cc,
	  src/Frame_Resizer_Base.cc,
	  src/Frame_Resizer_Extended.cc: did lots of work on the resizer, it's
	  behaviour should be more natural and satisfying now. (see also
	  #331591)
	* src/Win_GParted.cc: extended partition was resizable even when it's
	  busy. fixed.
	* src/ntfs.cc: made scan output more readable.
	* src/FrameVisualDisk.cc: added FIXME

2006-02-25 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/GParted_Core.h,
	  src/GParted_Core.cc: catch libparted exceptions and display them in
	  the operationdetails if an operation has failed.
	* src/Dialog_Progress.cc: small cosmetic change to the errordialog.

2006-02-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* improved errorhandling in Set_Used_Sectors() in the filesystemclasses
	
2006-02-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* in some places i still used MiB's instead of sectors to store sizes.
	  this has been fixed everywhere. Only the spinbuttons still use
	  MiB's. I have a few ideas on how to solve this, but i'll take it up
	  with #usability first.
	  	
2006-02-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.2.2
	  ======================================================

2006-02-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/FrameVisualDisk.cc: prevent crasher when visual_disks is empty.
	* include/Win_GParted.h,
	  src/Win_GParted.cc: load devices at startup on signal_show instead
	  of dispatching it from the c'tor.
	  Also did some cleanups in the behaviour of opening and closing of
	  the operationslist.

2006-02-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: deal with the rare situation when 2 partitions
	  are mounted on the same mountpoint. (see also #330327)

2006-02-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: added some checks before performing a
	  move/resize using libparted.

2006-02-18 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: added shortcut to menuitem
	  'Resize/Move'(#329627)

2006-02-17 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/GParted_Core.h,
	  include/Partition.h,
	  src/Dialog_Partition_Info.cc,
	  src/GParted_Core.cc,
	  src/Partition.cc,
	  src/TreeView_Detail.cc: store flags in a list instead of a string.
	* Makefile.am,
	  src/Makefile.am: cleanups
	  
2006-02-17 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Utils.h: added FIXME
	* include/Win_GParted.h,
	  src/Win_GParted.cc: cleanups (mostly messagebox related)
	* src/GParted_Core.cc: added some more progressfeedback to create and
	  resize

2006-02-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped to gparted-0.2.1
	  ======================================================

2006-02-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: sync after swapon/swapoff (see also #330327)
	
2006-02-16 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: improved check for libparted (thanks to Pete Shinners,
	  see also #330776) 
	
2006-02-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  include/Partition.h,
	  src/Dialog_Partition_Info.cc,
	  src/GParted_Core.cc,
	  src/Partition.cc,
	  src/TreeView_Detail.cc,
	  src/Win_GParted.cc: support partitions with multiple mountpoints
	  (see also #330327)

2006-02-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/ntfs.cc: changed a few things after talking with Szaka
	  (ntfsprogs developer)

2006-02-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* wrap mount/umount/swapon/swapoff instead of implementing it
	  ourselves (#330641)
	* moved execute_command() to Utils and made the filesystems use it. All
	  in all this decreased the size of the binary with 10% and made stuff
	  more readable.

2006-02-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* removed legend after discussion with usability guys

2006-02-10 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/TreeView_Detail.cc: finally fixed #169683!! ( party, party! :p )
	* include/Win_GParted.h,
	  src/Win_GParted.cc,
	  src/main.cc: cleanups
	
2006-02-09 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: set a min. width for detailstree instead of
	  deducing it from the textlength.
	* src/VBox_VisualDisk.cc: small fix to reap 'lost' pixels.
	
2006-02-09 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/Win_GParted.h,
	  src/Win_GParted.cc: it shouldn't be possible to remove an extended
	  partition which contains logicals.
	* src/TreeView_Detail.cc: only show mountpoint column when there is
	  mountinfo.

2006-02-08 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/Win_GParted.h,
	  src/Win_GParted.cc: added support for activating swap (#392672)

2006-02-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: commented set_do_overwrite_confirmation()
	  since it was only introduced since gtkmm-2.8 and i don't want to
	  raise the deps that high just yet.

2006-02-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: removed warning about busy device. It's not
	  really needed and it confuses people.
	* include/Operation.h: set default status of operationdetails to NONE
	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc: implemented export of operationdetails to
	  external file. This can be very useful for debugging. (#329968)
	
2006-02-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  include/Win_GParted.h,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc,
	  src/main.cc: added support for commandline arguments (#329414)

2006-02-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc: added mountpointcolumn (#304688)
	* include/Win_GParted.h,
	  src/Win_GParted.cc: added submenu 'Devices' which allows one to
	  select devices from the menu (#329415)
	
2006-01-31 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* confgure.in: added 'tr' to ALL_LINUGAS on request of the Turkish
	  coordinator (gorkem@gorkemcetin.com)

2006-01-30 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: fixed error with mountpoints containing
	  whitespaces. (#329247)

2006-01-30 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bump to gparted-0.2
	  ========================================================

2006-01-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/FileSystem.cc: sometimes certain commands couldn't be found
	  because PATH was overridden. fixed.

2006-01-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Utils.cc: fixed small bug in unmount()
	* src/jfs.cc,
	  src/xfs.cc: check if error actually contains data before adding it
	  to the feedbackdata. (this prevents empty rows in the operationtree)

2006-01-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc,
	  src/FileSystem.cc: added markup to operationdetails

2006-01-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc,
	  src/Win_GParted.cc: deal correctly with the progressdialog's
	  delete_event.
	
2006-01-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Partition_Info.h,
	  include/Win_GParted.h,
	  src/Win_GParted.cc: cleanups

2006-01-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h: added FIXME
	* src/Partition.cc: fixed Update_Number()

2006-01-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc,
	  src/Win_GParted.cc: made some changes to progressdialog behaviour.
	  
2006-01-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* gparted.desktop.in,
	  src/Dialog_Progress.cc,
	  src/Win_GParted.cc: string tweaks. (#328685)

2006-01-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Utils.h,
	  src/Utils.cc,
	  src/jfs.cc,
	  src/xfs.cc: fixed small issue with mounting. (discovered on the
	  livecd)

2006-01-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: improved scanning for root mountpoint (/)
	* src/Dialog_Partition_Info.cc: use Utils::format_size() instead of
	  displaying every value in MiB's. Also some cleanups and changes.

2006-01-26 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Progress.h,
	  src/Dialog_Progress.cc: implemented real 'cancel'.

2006-01-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Utils.cc: use realpath() to get absolute path to 'real'
	  /etc/mtab.
	  unmount if something went wrong while adding the line to '/etc/mtab'
	* src/Dialog_Progress.cc: replaced PACK_SHRINK with PACK_EXPAND_WIDGET
	
2006-01-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: swapped 'line' and 'c_str' to make
	  get_short_path() work properly.
	
2006-01-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/jfs.cc,
	  src/xfs.cc: replaced translatable string 'umount' with 'unmount'
	  (#328419)

2006-01-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* use Glib::get_tmp_dir() instead of hardcoding it as '/tmp'
	* use Glib::find_program_in_path() instead af a system/which combi
	* display current device in windowtitle

2006-01-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* correct partitiontype of destination is now set while copying
	* resizing now return correct status (sometimes it would report
	  succes even when some of the suboperationes failed)
	* fixed some issues with resizing and cylindersizes.
	
2006-01-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* removed Execute_Command() and replaced it by execute_command().
	  The latter uses Glib::spawn_sync instead of popen().
	  also made the filesystems call execute_command rather than calling
	  Glib::spawn_sync themselves.

2006-01-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* implemented Utils::sector_to_unit() and use it in several places
	* (finally) fixed errors with ntfsresizing (had a lot to do with
	  difference between MB and MiB)
	* resizing of reiserfs now shows more detailed feedback
	* support for TebiByte (TiB) unit

2006-01-21 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* changed KB/MB/GB/TB to KiB/MiB/GiB/TiB after reading http://www.iec.ch/zone/si/si_bytes.htm
	
2006-01-21 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/main.cc: cleanups
	* src/ntfs.cc: use ntfsfix for scanning.
	  run a simulation before performing an actual resize. more detailed
	  feedback.

2006-01-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/xfs.cc: updated copy to provide detailed feedback.

2006-01-20 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/jfs.cc: small fix with sequence of mount,remount,unmount
	* src/xfs.cc: resizing now contains detailed feedback
	* src/FileSystem.cc: show exceptiondescription in operationdetails
	
2006-01-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/jfs.cc: resizing now contains detailed feedback 
	
2006-01-19 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* added detailed progressfeedback. It still needs some polishing, but
	  is already far better then the old situation. And what's more, it's
	  finally threadsafe :p
	  
2006-01-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* configure.in: bumped version to 0.1 
	  ================================================================================
	  
2006-01-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: added visual feedback when unmounting or
	  deactivating swap. This can be useful when it takes longer then
	  usual. 
	  
2006-01-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Dialog_Partition_Info.cc: removed separator in accordance to the
	  HIG
	* include/Win_GParted.h,
	  src/Win_GParted.cc: it's now possible to deactivate swap from within
	  gparted.
	* src/GParted_Core.cc: sleep one second after deletion of a partition to
	  give the kernel some time to reread the partitiontable.
	
2006-01-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Utils.cc: commented 'ss .imbue( std::locale( "" ) )' (#157871)
	* src/Win_GParted.cc,
	  src/TreeView_Detail.cc,
	  src/Dialog_Base_Partition.cc: cleanups
	* include/Dialog_Partition_New.h,
	  include/Partition.h,
	  src/Dialog_Partition_New.cc,
	  src/GParted_Core.cc,
	  src/Partition.cc: allow forced partitionsizes (aka: do not round to
	  cylinder). (#169486)

2006-01-06 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/VBox_VisualDisk.cc: replaced free_color() with deprecated
	  free_colors() to allow building with gtkmm-2.6 (#326013)

2006-01-05 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Device.h,
	  src/Device.cc: replaced 'device_partitions' with 'partitions'
	* src/Win_GParted.cc: use new Device::partitions
	* include/Partition.h,
	  src/Partition.cc: added 'realpath'
	* src/Dialog_Partition_Info.cc: use Partition::realpath..
	* include/GParted_Core.h,
	  src/GParted_Core.cc:use ped_partition_get_path() instead of
	  constructing it ourselves. (#325800)
	  Also use global maps for mountpoints and
	  shortpaths to prevent fileaccess from happening more then once per
	  scan.

2006-01-04 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h,
	  src/Partition.cc: added get_length()
	* include/Utils.h,
	  src/Utils.cc,
	  src/Dialog_Partition_Info.cc,
	  src/Operation.cc,
	  src/TreeView_Detail.cc,
	  src/VBox_VisualDisk.cc,
	  src/Win_GParted.cc: from now on values >=1024MB are displayed in
	  GB's (#319840)

2006-01-03 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: replaced 'can not' with 'cannot' (#325570)

2006-01-02 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* happy new year ;)
	* src/TreeView_Detail.cc: fixed some alignment issues
	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  include/Operation.h,
	  src/Operation.cc,
	  include/Win_GParted.h,
	  src/Win_GParted.cc: removed confirmationdialogs for delete and
	  convert partitions (#319841).
	  Also renamed 'convert' to 'format' to reflect the actual
	  functionality.

2005-12-30 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: fixed alignments of cells in combo_devices

2005-12-30 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: replaced deprecated OptionMenu with ComboBox.
	  also fixed some issues which arised when no devices were detected.

2005-12-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Makefile.am: removed -g from AM_C(XX)FLAGS

2005-12-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: replaced access() with Glib::file_test in wait_for_node()

2005-12-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: disable treeview and graphical partition display at scantime
	* src/GParted_Core.cc: fixed two (potential) problems with device detection.

2005-12-29 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: because lp_partition didn't get initialized the
	  libpartedscan for free space would always fail. fixed.

2005-12-28 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* replaced popen() with Glib::spawn_command_line_sync() + general
	  cleanups in the set_used_sectors() functions.

2005-12-25 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* merry christmas
	* src/GParted_Core.cc,
	  src/VBox_VisualDisk.cc,
	  src/Win_GParted.cc: cleanups
	* include/FileSystem.h,
	  src/FileSystem.cc,
	  src/ext2.cc,
	  src/ext3.cc: replaced popen() with Glib::spawn_command_line_sync()

2005-12-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/TreeView_Detail.cc: replaced C-style cast with static_cast
	* src/VBox_VisualDisk.cc: removed unnecessary 'int ext_length'
	
2005-12-24 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc,
	  include/VBox_VisualDisk.h,
	  src/VBox_VisualDisk.cc,
	  include/Win_GParted.h,
	  src/Win_GParted.cc: emit proper signals for several events.
	* include/Partition.h,
	  src/Partition.cc: cleanups..

2005-12-22 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h,
	  src/Partition.cc: overloaded operator ==
	* include/VBox_VisualDisk.h,
	  src/VBox_VisualDisk.cc: rewrote the graphical partitiondisplay. It
	  now supports resizing and the extended partition is also selectable.
	  see also #312656
	* include/Win_GParted.h,
	  src/Win_GParted.cc: use the new graphical partitiondisplay.
	* src/TreeView_Detail.cc: minor cleanups

2005-12-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Dialog_Disklabel.h,
	  src/Dialog_Disklabel.cc: replaced deprecated Gtk::Optionmenu with
	  Gtk::ComboBoxText
	
2005-12-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: don't wait for node to appear when an extended
	  partition is created.
	
2005-12-15 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Utils.h,
	  src/Utils.cc: added get_color_as_pixbuf() to create colored squares
	  of custom sizes. These can be use throughout the app to represent
	  filesystems. e.g. in the treeview and convertmenu.
	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc,
	  include/VBox_VisualDisk.h,
	  src/VBox_VisualDisk.cc,
	  include/Win_GParted.h,
	  src/Win_GParted.cc: use Utils::get_color_as_pixbuf() instead of
	  custom drawn widgets.

2005-12-14 Bart Hakvoort <hakvoort@cvs.gnome.org>
	
	* include/FileSystem.h,
	  src/jfs.cc,
	  src/xfs.cc: use mkdir instead of wrapping CLI tool

2005-12-14 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Utils.h,
	  src/Utils.cc: added mount() and unmount()
	* src/Win_GParted.cc,
	  src/jfs.cc,
	  src/xfs.cc: use Utils::mount and Utils::umount instead of wrapping
	  CLI tools.

2005-12-14 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/Partition.cc: since we now have the device_path in Partition we
	  don't need to 'calculate' it anymore.

2005-12-14 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: did some cleanups
	* include/Operation.h,
	  src/Operation.cc: added get_index_extended to get the ext_index in a
	  uniform way instead of calculating it every time ourselves.
	
2005-12-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: check if file is open before using it.
	* src/Utils.cc: removed commented include

2005-12-13 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* replaced the inline Utils functions with static functions.
	  This shaves a few kbytes (24 in fact) off the binary and is a bit
	  cleaner code-wise (imho).

2005-12-12 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: don't use wait_for_node() if resizing an
	  extended partition (they don't have nodes :P)

2005-12-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* po/POTFILES.in: added include/Utils.h
	* include/GParted_Core.h,
	  src/GParted_Core.cc: replaced get_sym_path with get_short_path for
	  cleaner code and better performance.

2005-12-11 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: use statvfs instead of this ugly df-wrapping.

2005-12-08 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h,
	  src/Partition.cc: added 'Glib::ustring mountpoint'
	* include/GParted_Core.h,
	  src/GParted_Core.cc: implemented set_mountpoints() to set mountpoint
	  in partitions.
	* include/Dialog_Partition_Info.h,
	  src/Dialog_Partition_Info.cc: use Partition::mountpoint instead of
	  finding it ourselves.

2005-12-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* include/Partition.h,
	  src/Partition.cc: from now on each partition has a reference to it's
	  device.
	* src/Win_GParted.cc,
	  src/Dialog_Partition_New.cc: make use of new Set() from partition
	* include/GParted_Core.h,
	  src/GParted_Core.cc: since ped_file_system_clobber() ignored reiser4
	  i've implemented a custom 'filesystem signature remover'.
	  Also made use of the fact a partition now knows on which device it
	  lives.
	* src/Operation.cc: the get_string() didn't use
	  Get_Filesystem_String() and thus returned faulty strings. Also did
	  some cleanups.
	
2005-12-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: made warning a bit more informative
	
2005-12-07 Bart Hakvoort <hakvoort@cvs.gnome.org>

	* rewrote quite some stuff to use an enum to indentify filesystems
	  instead of stringcomparisons.

2005-11-29 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* src/jfs.cc: fixed 'broken pipe' warning
	* src/fat16.cc,
	  src/fat32.cc: removed unnecessary 'echo 2 |' from freespace scan.

2005-11-29 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* include/GParted_Core.h,
	  src/GParted_Core.cc: implemented a 'wait_for_node()' function after
	  reading http://bugs.gentoo.org/show_bug.cgi?id=102343. I couldn't
	  reproduce the bug myself, but i hope this wil solve it.
	  Also made 'set_partition_type()' return a boolean for improved
	  errorchecking.

2005-11-28 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* decided to use the Supported enum a bit more efficient in checks
	  ( doh, big deal :P )

2005-11-27 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* include/Win_GParted.h,
	  src/Win_GParted.cc: Added a menu 'Edit' which contains 'Undo' and
	  'Apply'. (#322550)

2005-11-27 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* configure.in: raised dependencies to >=gtkmm-2.6 and >=parted-1.6.25

2005-11-27 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* hmmz, lots of shimmery internals..
	  Instead of using a boolean to indicate support for certain
	  features i now use and enum (NONE, LIBPARTED, EXTENDED).
	  This allowed me to clean up some stuff that annoyed me ;)
	  Still.. the core could use a bit more love...

2005-11-25 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* include/Makefile.am,
	  include/Win_GParted.h,
	  src/Makefile.am: removed Dialog_About.[h,cc]
	* src/Win_GParted.cc: from now on we use Gtk::AboutDialog instead of
	  our own AboutDialog. Also use Gtk::Stock items instead of hardcoded
	  paths to images (about and harddisk).

2005-11-25 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* gparted-0.0.9

2005-11-25 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* gparted finally has a logo/icon ;) (thanks to Alain Clement)
	  see also #162092

2005-11-25 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* include/.cvsignore,
	  src/.cvsignore: added *.swp
	* Makefile.am,
	  include/Dialog_Filesystems.h: some modifications to pass 'make
	  distcheck'
	* src/GParted_Core.cc: minor cleanups
	
2005-11-24 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* include/FileSystem.h: cleanups
	* include/GParted_Core.h,
	  src/GParted_Core.cc: correct partitiontype is now set after creation
	  or conversion. (#322281)

2005-11-18 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* configure.in: added mk to ALL_LINGUAS on request of Arangel

2005-10-05 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* removed INSTALL
	* compose/.cvsignore,
	   compose/Makefile.am,
	   Makefile.am,
	   configure.in,
	   include/Makefile.am: some fixes to make 'make dist' work (thanks to Daniel Holbach)
	   
2005-09-21 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* configure.in: added 'vi' to ALL_LINGUAS

2005-09-13 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* src/Dialog_Filesystems.cc: fixed a11y thingy (#316108)
	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  include/Dialog_Disklabel.h,
	  src/Dialog_Disklabel.cc,
	  src/Win_GParted.cc : get labeltypes from libparted instead of hardcoding them,
	  also changed some text (#315979)

2005-09-13 Bart Hakvoort <hakvoort@cvs.gnome.org>
	* lots of stuff and cleanups, including fixing getting used/unused space of hfs/hfs+/fat16/fat32
	* also fixes bug #161362
	
2005-08-31 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Dialog_Filesystems.cc: at startup closebutton is focused (#308381)

2005-08-31 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Dialog_Progress.cc: fixed bug with big fonts (#301831)

2005-08-30 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: fixed typo (#312661)

2005-08-30 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* compose/ucompose.hpp: quick 'fix' for crashers in some locales (#157871)
	* include/Utils.h: basicly the same + minor cleanups
	* src/GParted_Core.cc: replaced C-style cast with static_cast..

2005-07-31  Ilkka Tuohela  <hile@iki.fi>

	* configure.in: Added 'fi' to ALL_LINGUAS.

2005-06-19  Ignacio Casal Quinteiro  <nacho.resa@gmail.com>

	* configure.in: Added 'gl' to ALL_LINGUAS.

2005-05-02  Chao-Hsiung Liao  <j_h_liau@yahoo.com.tw>

	* configure.in: Added "zh_TW" (Traditional Chinese) to ALL_LINGUAS.

2005-04-01  Steve Murphy  <murf@e-tools.com>

        * configure.in: Added "rw" to ALL_LINGUAS.

2005-03-22  Žygimantas Beručka  <uid0@akl.lt>

	* configure.in: Add "lt" (Lithuanian) to ALL_LINGUAS.

2005-02-28  Alexander Shopov  <ash@contact.bg>

	* configure.in: Added "bg" (Bulgarian) to ALL_LINGUAS

2005-02-26  Kostas Papadimas  <pkst@gnome.org>

	* configure.in: Added "el" (Greek) to ALL_LINGUAS.

2005-02-19  Christophe Merlet  <redfox@redfoxcenter.org>

	* configure.in: Added "fr" (French) to ALL_LINGUAS.

2005-02-08 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/hfs.cc,
	  src/jfs.cc,
	  src/ntfs.cc,
	  src/reiserfs.cc : fixed bug with LC_NUMERIC=C .. (thanks to mantiena for reporting)

2005-02-06 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: fixed a potential infinite loop in Show_Pulsebar() (thanks to xilun)

2005-02-01 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* Fixed a bunch of bugs (some of them crashers) which showed up if no devices were detected.

2005-01-30 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: Replaced menu "Operations" with "Device" and "Partition". Also implemented a 'set-disklabel feature'.
	* src/Dialog_Disklabel.cc: changed title and header to be more generic (was specific for a new disk).

2005-01-29 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Dialog_Filesystems.cc: Replaced stockitems APPLY and CANCEL with YES and NO.

2005-01-25 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Frame_Resizer_Base.cc: hmmz, i forgot to remove one unnecessary check.

2005-01-25 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/Frame_Resizer_Base.h,
	  include/Frame_Resizer_Extended.h,
	  src/Frame_Resizer_Base.cc,
	  src/Frame_Resizer_Extended.cc: finally got around to fix this annoying 'flickering' while using the resizer :)

2005-01-23 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: write actually used libpartedversion to stdout on startup. (useful for debugging)

2005-01-22 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/Dialog_Base_Partition.h,
	  src/Dialog_Base_Partition.cc,
	  src/Dialog_Partition_Copy.cc,
	  src/Dialog_Partition_Resize_Move.cc: Fixed bug in copy functionality (due to unset ORIG_START startsector wasn't set correctly). Also have ORIG*
	  initialized in ctor of dialogbase to prevent such errors from ever happening again (this one only showed up with gcc-3.3.5) .

2005-01-19 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc: removed sleep( 1 ). This isn't needed anymore now the layout is scanned before the re-readtest. (saves seconds at scantime :) )
	* replaced C-style typeconversion with static_casts throughout the project.

2005-01-18 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/Utils.h: used static_cast<> instead of C-style type conversion.
	* src/Makefile.am: install gparted binary in bin/ instead of sbin/ (as soon as i've time i want to implement a read-only modus)

2005-01-11 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/Win_GParted.cc: activate_convert used old filesystem instead of new one for checks. fixed.

2005-01-09 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: Added menu 'Operations' to menubar. This menu is a duplicate of the popupmenu and imho a bit unnecessary, but lots of
	  people requested this.. :)  Besides this, i removed 'menu_devices' and performed a few other cleanups.

2005-01-09 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/GParted_Core.cc,
	  src/Win_GParted.cc: call GParted_Core::find_supported_filesystems( ) in GParted_Core::GParted_Core() instead of Win_GParted::Win_GParted().
	  Also replaced 0xFFFF with GDK_Delete to improve readability of the source.

2004-12-29 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* replaced atoi with atol .

2004-12-29 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* src/jfs.cc: implemented read used/unused space on a jfs filesystem.

2004-12-29 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: As explained in the previous entry i've decided to add reiser4 detection to gparted as well..

2004-12-29 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* Added support for reiser4 (only creation atm, since the other functionality appears to be non-free software :/ )
	  Also, libparted isn't able to detect reiser4 yet, a patch to fix this is underway, but i should probably add reiser4 detection to gparted as well.

2004-12-28 Bart Hakvoort  <hakvoort@cvs.gnome.org>
	
	* The Filesystemclasses: Changed 'bool Create( const Glib::ustring & device_path, const Partition & new_partition )'
	to 'bool Create( const Partition & new_partition )'. Since i now use external tools for all filesystems, the partitionpath will suffice.

2004-12-28 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/linux_swap.cc: fixed some issues with linux-swap. From now on you need 'mkswap' to create/resize/move linux-swap.

2004-12-27 Bart Hakvoort  <hakvoort@cvs.gnome.org>

	* include/Device.h,
	  src/Device.cc,
	  src/GParted_Core.cc,
	  src/Win_GParted.cc: Removed the ugly Get_Highest_Logical_Busy() from Device and added a classvariable instead. This one is set in
	  GParted_Core and used wherever needed. I also removed Device::busy, and used the new variable to check if a device is busy.

2004-12-27 Bart Hakvoort  <gparted@users.sf.net>

	* Added cylsize to Device and made Operation contain a Device instead of only the path and lenght.
	  This way i was able to dump Get_Cyl_Size in the Core. Besides that, i used cylsize in WinGparted and made a lot of
	  cosmetic changes. Most of them were pretty useless, but hey, i'm bored ;)

2004-12-25 Bart Hakvoort  <gparted@users.sf.net>

	* src/GParted_Core.cc,
	  src/Win_GParted.cc,
	  include/Utils.h,
	  include/GParted_Core.h: moved inline Get_FS from Utils.h to GParted_Core, saves a few K in exe size ;)

2004-12-23 Bart Hakvoort  <gparted@users.sf.net>

	* src/GParted_Core.cc: removed sorting of detected devices. I figured we didn't need it anymore now 'deep_scan' is removed.

2004-12-22 Bart Hakvoort  <gparted@users.sf.net>

	* configure.in: bumped to 0.0.8

2004-12-20 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_Copy.cc,
	  src/Win_GParted.cc,
	  src/xfs.cc: xfs copy now uses xfsdump and xfsrestore. icw some hacks in the other 2 files, it's now possible to shrink an xfs partition
	  while doing the copy. Although i'd rather preffered 'real' (in place) resizing i figured it's better then nothing.
	  Also the sourcefilesystem is now checked before the actual copy is performed. If damaged beyond repair, the copy won't start.
	* src/Dialog_Partition_Resize_Move.cc: removed commented code.

2004-12-18 Bart Hakvoort  <gparted@users.sf.net>

	* include/Dialog_Filesystems.h,
	  src/Dialog_Filesystems.cc: Replaced treestore with liststore. I decided i didn't need a treeview after all...
	* src/Dialog_About.cc: Replaced "Gnome Partition Editor based on libparted" with "Gnome Partition Editor"
	* src/xfs.cc: fixed small error with creation of xfs filesystems (adrighem)

2004-12-17 Bart Hakvoort  <gparted@users.sf.net>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: Removed 'deep_scan' flag. From now on all scans are 'deep scans'.
	* include/Win_GParted.h,
	  src/Win_GParted.cc: Gui is now loaded before anything else. (#161054)

2004-12-17 Bart Hakvoort  <gparted@users.sf.net>

	* src/Win_GParted.cc: fixed bug with enabling/disabling 'copy' in menus.
	* src/ext2.cc,
	  src/ext3.cc: added missing check while deciding to disable/enable copy feature.

2004-12-17 Bart Hakvoort  <gparted@users.sf.net>

	* src/GParted_Core.cc: Only peform partable re-read check if at least one partition on a device is mounted.

2004-12-15 Bart Hakvoort  <gparted@users.sf.net>

	* some minor internal codechanges, which should save a few bytes of mem here and there.
	  (i was in a nitpicking mood :P )

2004-12-15 Bart Hakvoort  <gparted@users.sf.net>

	* Gparted_Core::get_fs now returns a const reference.
	* in copy and resizedialog filesystems with MAX set now have a max size of MAX - one cylinder .

2004-12-15 Bart Hakvoort  <gparted@users.sf.net>

	* (all filesystem classes): fixed bug with thousand separator (#161362).
	* ext2.cc,
	  ext3.cc: fixed bug with incorrect used/unused space after copying.

2004-12-15 Bart Hakvoort  <gparted@users.sf.net>

	* Added dialog (accessable from 'gparted' menu) which shows supported operations for the various filesystems.
	  I plan to put some more info in it, like what is missing etc..

2004-12-15 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_Copy: fixed small error with incorrect display of used space and did some cleanups.

2004-12-15 Bart Hakvoort  <gparted@users.sf.net>

	* Refined checks for functionality a bit. e.g. even if a filesystem can't be read, it's still possible to grow it 
	  (but shrinking gets disabled). Also removed that stupid grow_only flag from Utils.h and reordered Win_GParted::Set_Valid_Operations()

2004-12-14 Bart Hakvoort  <gparted@users.sf.net>

	* added support for jfs (create, copy, grow) and hfs (create, copy)
	* fixed a bug in copying xfs filesystems.
	* fixed a number of small bugs/annoying issues.
	* I guess this also means gparted now supports more filesystems then any other (OSS) partitionmanager.. (lekker belangrijk ;) )

2004-12-13 Bart Hakvoort  <gparted@users.sf.net>

	* Added support for xfs. this means creating and growing xfs filesystems. Shrinking requires some hacking with dump_xfs etc..
	  i'll add that at a later point. :)

2004-12-13 Bart Hakvoort  <gparted@users.sf.net>

	* Replaced boolean 'resize' with 'shrink' and 'grow'. It seems some filesystems only support growing (e.g. xfs) so i need
	  two flags to control the behaviour of the filesystemclasses.

2004-12-13 Bart Hakvoort  <gparted@users.sf.net>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: Removed a couple of unnecesarry variables. (saves a few bytes in memory =) )

2004-12-12 Bart Hakvoort  <gparted@users.sf.net>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: modified layoutscan a bit for improved handling of metadata.
	* include/Operation.h,
	  src/Operation.cc: modified Insert_Unallocated() to prevent potential crasher.

2004-12-12 Bart Hakvoort  <gparted@users.sf.net>

	* The fixes from 12-09 unearthed a number of long forgotten issues and annoyances. Hopefully they're all resolved now.

2004-12-09 Bart Hakvoort  <gparted@users.sf.net>

	* Fixed a bunch of issues with min. and max. sizes of filesystems.

2004-12-10  Gil Osher  <dolfin@rpg.org.il>

	* configure.in: Added 'he' (Hebrew) to ALL_LINGUAS.

2004-12-09 Bart Hakvoort  <gparted@users.sf.net>

	* src/fat16: use mkdosfs -F16 instead of libparted to create fat16 filesystems 

2004-12-09 Bart Hakvoort  <gparted@users.sf.net>

	 * src/ext2.cc,
	   src/ext3.cc,
	   src/ntfs.cc,
	   src/reiserfs.cc: added LANG=C to the commands which read the used space of a filesystem. This prevent errors with some locales.

2004-12-09 Bart Hakvoort  <gparted@users.sf.net>

	* added MIN and MAX to filesystemstruct to set min. and max sizes of a filesystem. So instead of checking per filesystem
	  i now simply check the fs.MIN or fs.MAX. this results in less and cleaner code. Also this will come in handy when adding
	  support for new filesystems. (This also fixed several minor bugs with filesystemsizes and gained some improvement in resizer
	  performance)

2004-12-07 Bart Hakvoort  <gparted@users.sf.net>

	* src/VBox_VisualDisk.cc: placed a small (2px) border around the legend.

2004-12-08  Dmitry G. Mastrukov  <dmitry@taurussoft.org>

	* configure.in: Added Russian to ALL_LINGUAS.

2004-12-07 Bart Hakvoort  <gparted@users.sf.net>

	* README: updated description to reflect current situation.

2004-12-07 Amanpreet Singh Alam <amanpreetalam@yahoo.com>

	* configure.in: pa is aeed ALL_LINGUAS

2004-12-03 Bart Hakvoort  <gparted@users.sf.net>

	* src/fat16.cc,
	  src/fat32.cc: added correct check for availability of 'dosfsck'
	* configure.in: bumped to 0.0.7  YAY! ;)

2004-12-03 Bart Hakvoort  <gparted@users.sf.net>

	* src/GParted_Core.cc: When ( ! deep_scan ) now only one device is scanned (first found one). Shaves off a couple of millisec from startuptime |-)
	* src/Win_GParted.cc: Fixed small bug with removable devices and the devicemenu. Also fixed redundant calling of 2 functions.

2004-12-02 Bart Hakvoort  <gparted@users.sf.net>

	* src/Win_GParted.cc,
	  src/TreeView_Detail.cc: fixed a minor annoying with treeviewdrawing.(Really minor ;) )

2004-12-01 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_New.cc,
	  src/Frame_Resizer_Base.cc: Fixed a crasher with the New Partition Dialog (thanks to Tino for reporting)

2004-11-30 Bart Hakvoort  <gparted@users.sf.net>

	* src/fat16.cc,
	  src/fat32.cc: implemented correct filesystemcheck using dosfsck.

2004-11-30 Bart Hakvoort  <gparted@users.sf.net>

	* include/FileSystem.h,
	  src/FileSystem.cc: Execute_Command() now returns exit status of executed command
	* the filesystemclasses: returnvalue (bool) is now set according to the return status of the command
	
2004-11-29 Bart Hakvoort  <gparted@users.sf.net>

	* src/GParted_Core.cc: It seemed some kernels remove and re-add blockdevicepaths after the commit_to_os. This caused trouble at some points
	  where the path was required. I decided to sleep 1 sec after each scan. So rescanning devices will take 1 extra second per device :|
	* src/Win_GParted.cc: fixed typo in string.

2004-11-29 Bart Hakvoort  <gparted@users.sf.net>

	* Every devicescan now tests on beforehand if the kernel is able to reread the partitiontable. If the kernel is unable to do
	  this, i disallow most operations. This may seem weird and even a bad thing to do, but the fact is it protects
	  the innocent user from a lot of potential damage. Till the linuxkernel is able to reread partitiontables no matter what, this seems
	  to be the best option. Of course a dialog with information will popup whenever such a situation is encountered.
	  In a next release i might consider adding an 'advanced mode' for users who know what they're doing.

2004-11-28  Alessio Frusciante  <algol@firenze.linux.it>

	* configure.in: Added "it" (Italian) to ALL_LINGUAS. 

2004-11-28 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_New.cc: selecting 'extended partition' twice caused a segfault. i cannot believe i didn't detect this bug earlier :| Fixed.
	  also made it possible to create an unformatted partition.
	* src/GParted_Core.cc: backend support for creating partition without filesystem (unformatted).

2004-11-28 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Disklabel.cc,
	  src/GParted_Core.cc: minor stringchanges (typos)

2004-11-28 Bart Hakvoort  <gparted@users.sf.net>

	* src/Makefile.am: sorted sourcefiles alphabetically, i know, pretty useless, but i like it :P

2004-11-28 Bart Hakvoort  <gparted@users.sf.net>

	* Harddisks without disklabel are now properly initizalized and shown in the menu. When one tries to create a new partition on
	  such a disk a dialog pops up with some blabla about disklabels and offers to create a disklabel. sweet :P (special thanks to mantiena-baltix 
	  for bringing this issue to my attention)
	* fixed minor annoyance with refreshing detailed deviceinfo after a 'deep refresh'

2004-11-24 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_Resize_Move.cc: fixed small bug with resizing and lower limits.
	* src/GParted_Core.cc: use ped_file_system_clobber before creating a filesystem on a partition.
	* src/Win_GParted.cc: pasting is now only allowed if unallocated >= copied partition + cylindersize.
	  Instead of dividing length device by amount of cylinders i use heads * sectors/track to get cylindersize.
	  Changed device busy warning a bit to more decent english (adamw)
	* src/ntfs.cc: readded '-Q' to mkntfs. The error about an 'unknown filesystem' was related to detection problems and not to
	  faulty creation of the filesystem. Should be solved anyway by implementing ped_file_system_clobber.
	  Also removed ntfsfix since it didn't do anything relevant. Instead i use ntfsresize, because this contains relevant checks (szaka)

2004-11-24 Bart Hakvoort  <gparted@users.sf.net>

	* src/TreeView_Detail.cc: renamed columnheader from 'Type' to 'Filesystem'. Dunno why it was called 'Type' (maybe some PM legacy =)  )
	* src/Win_GParted.cc: Made device busy warning a bit more sensible.

2004-11-24 Bart Hakvoort  <gparted@users.sf.net>

	* include/Utils.h,
	  src/GParted_Core.cc,
	  src/Partition.cc,
	  src/TreeView_Detail.cc,
	  src/VBox_VisualDisk.cc: marked some strings for translation ('unknown', 'used', 'unused') and replaced lowercase 'unallocated' with '---'.

2004-11-24 Bart Hakvoort  <gparted@users.sf.net>

	* include/GParted_Core.h,
	  src/GParted_Core.cc: fixed nasty error with resizing 'fixed-start filesystems'.
	* src/Partition.cc: added a check to prevent unused space from being bigger then total space.
	* src/ntfs.cc: removed -Q from mkntfs. -Q bypassed some safetychecks to gain performance and (so i heard later) also had a
	  tendency of failing ;) (Adrighem)

2004-11-23 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_New.cc,
	  src/Win_GParted.cc: Fixed some errors with 'unknown' filesystem. + some cosmetics

2004-11-23 Bart Hakvoort  <gparted@users.sf.net>

	* include/GParted_Core.h,
	  src/GParted_Core.cc,
	  src/Makefile.am,
	  include/ntfs.h,
	  src/ntfs.cc: added full ntfs support. (couldn't test it very well due to the absence of a win32 box :P )

2004-11-22 Bart Hakvoort  <gparted@users.sf.net>

	* include/Utils.h: fixed crasher with unknown filesystems.

2004-11-22 Bart Hakvoort  <gparted@users.sf.net>

	* src/GParted_Core.cc: cosmetics
	* src/reiserfs.cc: make use of real commands instead of their symlinks. fixed copy of reiserfs filsystem
	  (the new size wasn't reported correctly)

2004-11-22 Bart Hakvoort  <gparted@users.sf.net>

	* src/ext2.cc,
	  src/ext3.cc: removed ':' from Blocksize scan.
	* src/reiserfs.cc: dumped progsreiserfs. From now on gparted uses the official namesystools (reiserfsprogs)
	  this resulted in much more reliable creation en resizing of reiserfs filesystems.

2004-11-21 Bart Hakvoort  <gparted@users.sf.net>

	* Again way too many chances to create a detailed entry (i'm glad i'm the only dev atm :P ).
	  Resizing of ext2/3 works perfect now. I've even tested it on the partition holding my SG seasons =)
	  Implemented checking of filesystems (only internally used atm).
	  Done some overall tweaking, finetuning etc.. release 0.0.7 is getting shape.

2004-11-19 Bart Hakvoort  <gparted@users.sf.net>

	* include/Device.h,
	  src/Device.cc: Removed bool Get_Any_Busy() in favor of public bool busy which is set in gparted_core.
	  This also fixed a small bug with incorrect mountdetection of logical partitions.
	  Also added a Reset() function to properly reset the contents of a device. to zero/empty .
	* include/GParted_Core.h,
	  src/GParted_Core.cc: 'busyness' of a device is now determined in get_devices().
	  Renamed get_partitions() to set_device_partitions to reflect its proper function.
	  When a new partition is created to contain a copied filesystem the size is now properly set. This fixes
	  a very annoying bug which no one knew about except for me =) .
	* src/Win_GParted.cc: use boolean busy from device instead of Get_Any_Busy() .

2004-11-17 Bart Hakvoort  <gparted@users.sf.net>

	* src/ext3.cc: availability of 'tune2fs' command wasn't detected correctly. fixed
	* src/fat32.cc: make use of dosfs tools (mkdosfs -F32) instead of libparted's Fat-creator.
	
2004-11-17 Bart Hakvoort  <gparted@users.sf.net>

	* Rewrote a large part of gparteds internal code. Filesystemssupport is now much more separated from the rest of gparted and
	  adding support for other filesystems should be a piece of cake now (hope that's true :P)
	  It still needs a lot of love, but the foundations are laid =)

2004-11-07 Bart Hakvoort  <gparted@users.sf.net>

	* include/Operation.h,
	  src/Operation.cc: make use of reference arguments instead of return values in some functions.
	  Also fixed a small bug with deletion of a virtual (new) logical partition.
	* include/VBox_VisualDisk.h,
	  src/VBox_VisualDisk.cc: logical filesystems weren't shown in the legend, fixed.
	* src/Frame_Resizer_Base.cc: fixed small bug with custom cursors.
	* src/TreeView_Detail.cc: removed obsolete, already commented code.
	* src/Win_GParted.cc: make use of reference arguments instead of return values in some functions. (see Operation)

2004-11-06 Bart Hakvoort  <gparted@users.sf.net>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: added umount option. Also include unistd.h to solve some issues with gcc 3.2.x

2004-11-06 Bart Hakvoort  <gparted@users.sf.net>

	* instead of listing all partition in one list, logical partitions are now stored in a sublist in extended partition object.
	This makes partitionhandling in gparted more natural and transparant. It also allowed me to clean up this ugly Operation class ;)

2004-10-31 Bart Hakvoort  <gparted@users.sf.net>

	* include/Partition.h,
	  src/Partition.cc: removed color_string
	* src/VBox_VisualDisk.cc,
	  src/TreeView_Detail.cc: replaced color_string with Get_Color from Utils.h

2004-10-30 Bart Hakvoort  <gparted@users.sf.net>

	* configure.in: added checks for libuuid and libdl. Also refined libparted check a bit.
	* include/Partition.h,
	  src/Partition.cc: removed Get_Color()
	* include/Utils.h: added inline Glib::ustring Get_Color( const Glib::ustring & filesystem )
	* src/Dialog_Partition_New.cc,
	  src/Win_GParted.cc: make use of Get_Color from Utils.h
	* src/Device.cc: fixed a crasher with (at least) pl_PL locale.

2004-10-25 Vincent van Adrighem  <adrighem@gnome.org>

	* debian/*: Added a debian subdir. This dir contains buildscripts
	    for debian.

2004-10-22 Bart Hakvoort  <gparted@users.sf.net>

	* configure.in: bumped to version 0.0.6

2004-10-22 Bart Hakvoort  <gparted@users.sf.net>

	* configure.in: libpartedcheck now looks for correct version number (finally i'll be rid off those stupid bugreports =) )

2004-10-22 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_Info.cc: codecleanups.. Hey! i was bored :P

2004-10-22 Bart Hakvoort  <gparted@users.sf.net>

	* src/Device.cc: removed libparted messagesdialog. instead, show them on the console. They proved to be pretty useless.
	* src/Win_GParted.cc: fixed crasher when loading gparted (or refresh devices) while there's a (audio) cd in the cdrom-drive.

2004-10-21 Bart Hakvoort  <gparted@users.sf.net>

	* configure.in: modernized use of AM_INIT_AUTOMAKE a bit (according to 
	http://www.gnu.org/software/automake/manual/html_node/Public-macros.html#Public%20macros)

2004-10-21 Bart Hakvoort  <gparted@users.sf.net>

	* include/Dialog_Partition_Resize_Move.h,
	  src/Dialog_Partition_Resize_Move.cc: fixed some bugs with minimum size of resizable partition + some codecleanups.

2004-10-20 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Base_Partition.cc (Get_New_Partition): Tweaked resizingbehaviour a bit. This solved some minor annoyances.

2004-10-18 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_New.cc: changed width of optionmenus from 150 to 160 pixels. (in certain langs the strings didn't fit)
	* src/VBox_VisualDisk.cc: used/unused legend doesn't have to show up if there's only linux-swap. 

2004-10-17 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_About.cc (Show_Credits): Fixed Gtk-Warning with unknown pango markup and placed a 5 pixel-border around 
	translators credits.

2004-10-16 Bart Hakvoort  <gparted@users.sf.net>
	
	* src/Device.cc: when the libary of an optional filesystem (atm only reiserfs) wasn't installed, every scan printed an error 
	in the console (df couldn't find the partition listed). Fixed by checking if partition is busy before using df.

2004-10-16 Bart Hakvoort  <gparted@users.sf.net>
	
	* src/Dialog_Progress.cc: changed dialogwidth from 500 to 600 pixels. (icw certain languages the operation didn't fit)

2004-10-16 Bart Hakvoort  <gparted@users.sf.net>

	* include/Win_GParted.h,
	  src/Win_GParted.cc: First load gui and then scan devices, this resulted in way faster startup and is more satisfactory (imho)
	  Also did some minor code cleanups and rearranged some functions needed for applying operations.
	* src/Dialog_Progress.cc: few minor code cleanups.

2004-10-14 Bart Hakvoort  <gparted@users.sf.net>

	* include/Operation.h,
	  src/Operation.h: minor (code) change in displaying errormessage. Made Apply_Resize_Move_Extended_To_Visual() a bit more
	  readable (and thus debugable). This whole class could still use a soft, caring hand though :P
	* src/Device.cc: Unallocate space < 1MB wasn't filtered out. fixed.
	* src/Partition.cc (Set_Used): Unused wasn't set properly. fixed. 

2004-10-11 Bart Hakvoort  <gparted@users.sf.net>

	* src/Win_GParted.cc: i just can't stop tweaking the operationslist =)

2004-10-11 Bart Hakvoort  <gparted@users.sf.net>

	* src/Device.cc (Read_Disk_Layout): logic unallocated space wasn't read correctly, fixed.
	* include/Win_GParted.h: added open_operationslist() and menu_view_operations() .
	* src/Win_GParted.cc: tweaked operationlist behaviour a bit. Also added 'Operations" toggle-item to View menu.

2004-10-11 Bart Hakvoort  <gparted@users.sf.net>

	* src/Device.cc (Read_Disk_Layout): Again =) Decided to use switch ( blahblah ) instead of if else statements.

2004-10-11 Bart Hakvoort  <gparted@users.sf.net>

	* src/Device.cc (Read_Disk_Layout): some internal codechanges. Looks a bit cleaner now.

2004-10-11 Bart Hakvoort  <gparted@users.sf.net>

	* include/Device.h,
	  src/Device.cc: made 'deep-scan' optional in Read_Disk_Layout. Removed obsolete (already) commented function.
	* include/Partition.h,
	  src/Partition.cc: Took used sectors out of Set() and added a Set_Used() function instead. Also added Reset() .
	* src/Dialog_Partition_New.cc: minor change to make use of the new Set() in Partition..
	* include/Win_GParted.h,
	  src/Win_GParted.cc: show pulsing progressbar while refreshing devices.

2004-10-08 Bart Hakvoort  <gparted@users.sf.net>

	* src/Partition.cc: changed color of reiserfs from blue to purple highlight. + some cosmetics.

2004-10-08 Bart Hakvoort  <gparted@users.sf.net>

	* include/Frame_Resizer_Base.h: removed inheritance from sigc::trackable. (this is already done by Glib::Object)
	* src/Dialog_Partition_Copy.cc,
	  src/Frame_Resizer_Base.cc: fixed issues with resizing reiserfs filesystems.

2004-10-08 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_About.cc: updated translatorcomment.

2004-10-08 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Base_Partition.cc,
	  src/Dialog_Partition_Resize_Move.cc: fixed some resizing-issues with reiserfs.

2004-10-07 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Base_Partition.cc,
	  src/Win_GParted.cc: removed spaces before some exclamation and question marks (thanks to Jordi Mallach)

2004-10-07 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_About.cc: unmarked 'Copyright' string for translation and replaced (c) with © 

2004-10-07 Bart Hakvoort  <gparted@users.sf.net>

	* include/Utils.h: added support for colored text to mk_label
	* include/VBox_VisualDisk.h,
	  include/VBox_VisualDisk.cc: use UTF-8 character ██ instead of some self-forged widget.

2004-10-06 Bart Hakvoort  <gparted@users.sf.net>

	* implemented mk_label wherever possible (means less code, improved readability)

2004-10-06  David Lodge <dave@cirt.net>

	* configure.in (ALL_LINGUAS): Added "en_GB" (British English).

2004-10-06 Bart Hakvoort  <gparted@users.sf.net>

	* lots of files =) : enabled support for reiserfs, also made filesystemsupport more 'pluggable' so it's easier to
	add support for other filesystems in the future.
	* include/Utils.h: new file containing much used functions and variables.

2004-10-06  Francisco Javier F. Serrador  <serrador@cvs.gnome.org>

	* configure.in (ALL_LINGUAS): Added "es" (Spanish).

2004-10-04  Jordi Mallach  <jordi@sindominio.net>

	* configure.in (ALL_LINGUAS): Added "ca" (Catalan).
	* autogen.sh: Don't use USE_COMMON_DOC_BUILD, as GParted doesn't
	have any GNOME documentation yet.

2004-10-02 Bart Hakvoort  <gparted@users.sf.net>

	* include/Device.h,
	  include/Dialog_Progress.h,
	  include/TreeView_Detail.h,
	  include/VBox_VisualDisk.h: removed unnecessary #include <sstream>

2004-10-02 Bart Hakvoort  <gparted@users.sf.net>

	* src/VBox_VisualDisk.cc: fixed incorrect tooltip with unallocated space

2004-10-02 Bart Hakvoort  <gparted@users.sf.net>

	* include/Dialog_Base_Partition.h,
	  src/Dialog_Base_Partition.cc: added void Set_MinMax_Text( long min, long max )
	* src/Dialog_Partition_Copy.cc: fix incorrect upper limit for fat16 in label
	* src/Dialog_Partition_New.cc: make use of this function, instead of accessing the label directly 
	* src/Dialog_Partition_Resize_Move.cc: fix incorrect upper limit for fat16 in label

2004-10-02 Bart Hakvoort  <gparted@users.sf.net>

	* removed all stringstreams from the project (they were possibly responsible for rare chrashes in certain locales)
	Note that i left 1 in include/Partition.h, this one is needed for int-->string conversions and won't pose a thread.

2004-10-01 Bart Hakvoort  <gparted@users.sf.net>

	* almost all files: cosmetics (mostly tabfixes)

2004-10-01 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_Partition_New.cc: marked 3 strings for translation.
	* src/Operation.cc: fixed an i18n related crasher and did some cosmetic cleanups.

2004-10-01 Bart Hakvoort  <gparted@users.sf.net>

	* src/Dialog_About.cc,
	  src/TreeView_Detail.cc: minor changes to a few strings

2004-10-01 Hendrik Brandt  <hebra@cvs.gnome.org>

	* configure.in: added "de" (German) to ALL_LINGUAS

2004-09-30 Bart Hakvoort  <gparted@users.sf.net>

	* configure.in: bumped version to 0.0.5

2004-09-30 Bart Hakvoort  <gparted@users.sf.net>

	* include/TreeView_Detail.h,
	  src/TreeView_Detail.cc: added colored squares to the tree to highlight filesystems.

2004-09-29 Bart Hakvoort  <gparted@users.sf.net>

	* .cvsignore: ignore all projectfiles 

2004-09-29 Bart Hakvoort  <gparted@users.sf.net>

	* include/Dialog_Partition_Info.h,
	  src/Dialog_Partition_Info: removed Gtk::Label * mk_label( const Glib::ustring & text )
	* include/Partition.h: added inline Gtk::Label * mk_label( const Glib::ustring & text )
	  and inline Glib::ustring num_to_str( Sector number )
	* include/Win_GParted.h,
	  src/Win_GParted.cc: fixed aligment problems with some languages in harddisk-info


2004-09-29 Bart Hakvoort  <gparted@users.sf.net>

	* src/VBox_VisualDisk.cc,
	  src/Win_GParted.cc: minor i18n related tweaks.

2004-09-29  Duarte Loreto <happyguy_pt@hotmail.com>

	* configure.in: Added Portuguese (pt) to ALL_LINGUAS.

2004-09-28 Bart Hakvoort  <gparted@users.sf.net>

	*	src/VBox_VisualDisk.cc: marked 2 minor strings for translation (is a duplicate of an existing string in POT file)
	*	src/Dialog_About.cc: made names (author/translators) selectable
	*	include/Dialog_Partition_Info.h,
		src/Dialog_Partition_Info.cc: solved some alignmentproblems which showed up in certain locales.

2004-09-28  Maxim Dziumanenko <mvd@mylinux.com.ua>

	* configure.in: Added uk to ALL_LINGUAS.

2004-09-27  Bart Hakvoort  <gparted@users.sf.net>

	*	include/Win_GParted.h,
		src/Win_GParted.cc: changed representation of hardisk info

2004-09-27  Bart Hakvoort  <gparted@users.sf.net>

	*	src/Partition.cc: marked "Unallocated" for translatation

2004-09-26  Bart Hakvoort  <gparted@users.sf.net>

	*	src/Dialog_Base_Partition.cc,
		src/	Dialog_Partition_New.cc: fixed alignment problems with some languages

2004-09-26  Bart Hakvoort  <gparted@users.sf.net>

	*	src/Win_GParted.cc: fixed bug that occured while converting the filesystem of a new partition
	*	src/Dialog_About.cc: removed "documented by" tab (didn't need it yet) and fixed alignments of button
	with some languages.

2004-09-26  Bart Hakvoort  <gparted@users.sf.net>

	*	src/Win_GParted.cc: fixed bug with check for max amount of partitions while pasting a copied partition.
	*	src/Partition.cc: changed colors of ext2, ext3 and linux-swap
	
2004-09-25  Raphael Higino  <raphaelh@cvs.gnome.org>

	*	src/Win_GParted.cc: Fixed typo bugs (word "than" written 
as "then" in two strings)

2004-09-25  Bart Hakvoort  <gparted@users.sf.net>
	*	src/Win_GParted.h,
		src/Win_GParted.cc: removed expander. The diskinfo is now always visible.
	*	src/Dialog_Partition_Info.cc: fixed small bug with overlapping text. 
	*	src/Dialog_About.cc: use VERSION instead of hardcoded numbers

2004-09-25  Bart Hakvoort  <gparted@users.sf.net>
	*	Dialog_About.cc: made "Translated by" tab a bit more sensible, also added an translator-credits string.

2004-09-25  Bart Hakvoort  <gparted@users.sf.net>
	*	Operation.h,
		Operation.cc,
		Partition.h,
		Partition.cc
		Dialog_Partition_Copy.cc,
		Dialog_Partition_Info.cc,
		Dialog_Partition_New.cc,
		Win_GParted.cc: prepared "copy of" and "New Partition" for i18n and did some cleanups on the way...
		I believe all relevant strings are now properly marked for translation.	
		
2004-09-25  Bart Hakvoort  <gparted@users.sf.net>
	*	Dialog_Progress.h,
		Operation.h,
		Partition.h,
		Win_GParted.h,
		Dialog_Base_Partition.cc,
		Dialog_Partition_Copy.cc,
		Dialog_Partition_Info.cc,
		Dialog_Partition_New.cc,
		Dialog_Partition_Resize_Move.cc,
		Dialog_Progress.cc,
		Operation.cc,
		Win_GParted.cc: changed some sentences on translators request
	*	compose,
		compose/ucompose.hpp : added composelib to provide sprintf functionality in C++ style
	*	po/POTFILES.in : added ../src/main.cc

2004-09-23  Adam Weinberger  <adamw@gnome.org>

	* configure.in: Added en_CA to ALL_LINGUAS.

2004-09-23  Bart Hakvoort  <gparted@users.sf.net>

	* configure.in,
	   include/i18n.h: fixed some problems with i18n.

2004-09-23  Raphael Higino  <raphaelh@cvs.gnome.org>

	* configure.in: Added "pt_BR" to ALL_LINGUAS.

2004-09-23  Christian Rose  <menthos@menthos.com>

	* configure.in: Added "sv" to ALL_LINGUAS.


**changes**
- replaced some 'dunglish' terms with more decent english. (Thanks to Tino Meinen)
- cleaned up autoconf stuff a bit
- gparted now gets installed in the sbin/ instead of bin/ (1023181)
- maximum amount of primary partition isn't static anymore, it gets asked from the partition table.
- lots of internal code cleanups. this improved performance and stability.
- doubleclick now invokes infodialog
- added .desktop file so gparted is accessible from GNOME/KDE menus (thanks to Stephane LOEUILLET, 1023176)

**fixes**
- sometimes creating new fat filesystems in very small spaces resulted in errors. fixed.
- use copies from buildfiles instead of symlinks to them. (Thanks to Kristof Vansant)
- when performing operations on just copied partitions, there was a chance the operation would be executed on another partition. fixed.
- fixed a rare bug that caused incorrect partitiontable display after an operation went wrong.
- some errormessages were not entirely threadsafe, fixed (hopefully :P )
- fixed annoying bug with warningdialog which pops up after performing an operation on a busy device

--------------------------------------------------------------------------

GParted-0.0.4	04 Sep 2004		:

- fixed another bug with hotpluggable stuff (usbdevices etc...)
- fixed "random" chrasher while performing actions on a device with a mounted partition.
- better alignment of information in deviceinfo and partitioninfo. (there were some problems with certain fonts)
- changed checking for filesystemlimits in new partition dialog a bit.
- fixed small bug in new partition dialog which made it possible to add fat16 partition > 1023MB
- time left in progressbar shows now minutes and seconds
- implemented copy'n paste functionality
- fixed small bug with resizer
- internal code cleanups, gained some performance
- made the operationtitles a bit more informative
- fixed bug with converting non-existent (new) partitions
- implemented new operationslist
- lots of small stuff

-------------------------------------------------------

GParted-0.0.3	26 Aug 2004		:

- and as always, lots of small fixed/changes..
- fixed bug with resizing extended partition
- fixed bug which occasionally occurred when deleting filesystems with errors on them
- fixed small bug with deleting new logical partitions while a partition with a higher number is mounted
- added read-only support for partition flags (e.g. lba, boot, etc...)
- implemented conversion between filesystems. (no big deal, all data is destroyed in the process)
- compiling/running tested on 64bits arch, went perfectly :)
- fixed another small bug with re-reading devices (optionmenu wasn't updated)
- Early check for errors on filesystem. Disable appropiate actions and explain in Info
- When a device can't be read it isn't listed anymore.

------------------------------------------------------

GParted-0.0.2	18 Aug 2004   :

- new create dialog
- far more compliant with HIG
- unallocated space now visible in treeview
- fixed bug with re-reading devices (segfault)
- fixed bug with new extended (segfault)
- a couple of other small things, fixes and improvements 

---------------------------------------------

GParted-0.0.1	12 Aug 2004   :

***FIRST RELEASE!
- Create (ext2, linux-swap, fat16, fat32)
- resize (ext2, ext3, linux-swap, fat16, fat32 )
- move	(linux-swap, fat16, fat32)
- Full operationslist with undo
- much more little stuff
- basicly working, but not tested very well
