"Fossies" - the Fresh Open Source Software Archive

Member "gparted-1.3.1/ChangeLog" (19 Jul 2021, 1538699 Bytes) of package /linux/misc/gparted-1.3.1.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "ChangeLog": 1.3.0_vs_1.3.1.

    1 # Generated by Makefile. Do not edit.
    2 
    3 2021-07-19  Curtis Gedak <gedakc@gmail.com>
    4 
    5     ==========   gparted-1.3.1   ==========
    6 
    7 2021-07-15  Philipp Kiemle <philipp.kiemle@gmail.com>
    8 
    9     Update German translation
   10 
   11 2021-07-14  Wolfgang Stöggl <c72578@yahoo.de>
   12 
   13     Update German translation
   14 
   15 2021-07-14  Claude Paroz <claude@2xlibre.net>
   16 
   17     Updated French translation
   18 
   19 2021-07-14  Ngọc Quân Trần <vnwildman@gmail.com>
   20 
   21     Update Vietnamese translation
   22 
   23 2021-07-13  Daniel Șerbănescu <daniel@serbanescu.dk>
   24 
   25     Update Romanian translation
   26 
   27 2021-07-13  Daniel Mustieles <daniel.mustieles@gmail.com>
   28 
   29     Updated Spanish translation
   30 
   31 2021-07-12  Enrico Nicoletto <liverig@gmail.com>
   32 
   33     Update Brazilian Portuguese translation
   34 
   35 2021-07-12  Baurzhan Muftakhidinov <baurthefirst@gmail.com>
   36 
   37     Update Kazakh translation
   38 
   39 2021-06-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
   40 
   41     Copy XFS UUID when copying the file system (!85)
   42     
   43     For the same reason as in the previous commit, the UUID is copied when
   44     copying every file system type except for XFS, where a new XFS is
   45     created with a new UUID.
   46     
   47     Again preview of the copy operation expects the UUID to be copied.
   48     (Look in Partition > Information of the source and pasted partitions
   49     before the operation is applied).
   50     
   51     Fix as before by specifying the desired file system UUID when creating
   52     the new XFS as part of the copy operation.
   53     
   54     However there is an extra complication.  The XFS kernel driver refuses
   55     to mount a file system with a duplicate UUID of an already mounted XFS.
   56     
   57         # mkfs.xfs -L xfs_copy /dev/sdb1
   58         # mount /dev/sdb1 /mnt/1
   59         # tail -2 /var/log/messages
   60         Jun  3 21:41:24 localhost kernel: XFS (sdb1): Mounting V5 Filesystem
   61         Jun  3 21:41:24 localhost kernel: XFS (sdb1): Ending clean mount
   62     
   63         # /dev/sdb1: LABEL="xfs_copy" UUID="d654fc7f-e417-4ec6-88e8-8a7d0d46b7d8" TYPE="xfs"
   64         # mkfs.xfs -L xfs_copy -m uuid="d654fc7f-e417-4ec6-88e8-8a7d0d46b7d8" /dev/sdb2
   65         # mount /dev/sdb2 /mnt/2
   66         mount: wrong fs type, bad option, bad superblock on /dev/sdb2,
   67                missing codepage or helper program, or other error.
   68     
   69                In some cases useful info is found in syslog - try
   70                dmesg | tail or so.
   71         # echo $?
   72         32
   73         # tail -1 /var/log/messages
   74         Jun  3 21:41:31 localhost kernel: XFS (sdb2): File system has duplicate UUID d654fc7f-e417-4ec6-88e8-8a7d0d46b7d8 - can't mount
   75     
   76     Handle this specifying the needed option [1] when mounting the second
   77     XFS during the copy.
   78     
   79         # mount -o nouuid /dev/sdb2 /mnt/2
   80         # mount | grep /dev/sdb
   81         /dev/sdb1 on /mnt/1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
   82         /dev/sdb1 on /mnt/1 type xfs (rw,relatime,seclabel,nouuid,attr2,inode64,noquota)
   83     
   84     Duplicating the UUID may seem troublesome, but it is being done:
   85     1.  To make the GParted copied XFS be as much a clone as possible, to
   86         match what is does with other file systems.
   87     2.  It has a valid use case; of cloning a Linux installation to a new
   88         drive or restoring a partition image backup.  In these cases it is
   89         much simpler if the UUID of the copy remains the same because it
   90         avoids having to edit GRUB2 configuration and fstab file system
   91         mounting which is nearly always done via UUID.
   92     3.  GParted has the new UUID operation, to change the UUID for cases
   93         when a copied file system needs to be mounted at the same time as
   94         the source.
   95     
   96     [1] xfs(5) - xfs - layout, mount options, and supported file attributes
   97         for the XFS filesystem
   98         https://man7.org/linux/man-pages/man5/xfs.5.html
   99         "MOUNT OPTIONS
  100         ...
  101         nouuid Don't check for double mounted file systems using the file
  102                system uuid.
  103         "
  104     
  105     Closes !85 - Make XFS copy duplicate the file system label and UUID
  106 
  107 2021-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
  108 
  109     Copy XFS label when copying the file system (!85)
  110     
  111     As GParted performs block copy of partitions then the label, which is
  112     stored in the file system superblock, is also copied.  This is true for
  113     copies performed using the GParted internal block copy and for EXT2/3/4
  114     and NTFS which are copied using the file system specific commands
  115     e2image and ntfsclone respectively.  However when an XFS file system is
  116     copied the label is not copied because a new file system is created
  117     using mkfs.xfs and the files copied using xfsdump | xfsrestore.
  118     
  119     Preview of the copy operation in GParted also reflects the fact that the
  120     label will be copied.
  121     
  122     Fix this by simply specifying the desired label when creating the new
  123     destination XFS.
  124     
  125     Closes !85 - Make XFS copy duplicate the file system label and UUID
  126 
  127 2021-05-29  Curtis Gedak <gedakc@gmail.com>
  128 
  129     Handle change in path for udisks2-inhibit executable (!84)
  130     
  131     Debian (and derived) distros with the udisks2 [1] repository and the
  132     additional 'udisks2-inhibit' executable had the location changed from:
  133         /usr/lib/udisks2/
  134     to:
  135         /usr/libexec/udisks2/
  136     with udisks2 version 2.8.4-2 and the following commit:
  137     
  138         f6744a33 - Move the daemons to /usr/libexec now that's allowed in the policy
  139         https://salsa.debian.org/utopia-team/udisks2/-/commit/f6744a3364eafdb07e3e78e329f202394804c574
  140     
  141     Distros such as Fedora and openSUSE are unaffected as the udisks [2]
  142     repository does not contain 'udisks2-inhibit'.
  143     
  144     [1] udisks2 Debian (and derived) repository
  145         https://salsa.debian.org/utopia-team/udisks2
  146     
  147     [2] udisks repository
  148         https://github.com/storaged-project/udisks
  149     
  150     Closes !84 - Handle change in path for udisks2-inhibit executable
  151 
  152 2021-05-31  Andika Triwidada <atriwidada@gnome.org>
  153 
  154     Update Indonesian translation
  155 
  156 2021-05-23  Rafael Fontenelle <rafaelff@gnome.org>
  157 
  158     Update Brazilian Portuguese translation
  159 
  160 2021-05-23  Piotr Drąg <piotrdrag@gmail.com>
  161 
  162     Update Polish translation
  163 
  164 2021-05-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
  165 
  166     Fix recognition of SD/MMC device names (!83)
  167     
  168     User reported that GParted didn't detect their eMMC drive [1].  Not
  169     recognised device name was /dev/mmcblk0.  Confirmed that the regression
  170     was introduced by this commit [2].  Fix the code and regular expression
  171     used to recognise SD/MMC device names.
  172     
  173     [1] GParted forum thread: eMMC drive not detected...?
  174         http://gparted-forum.surf4.info/viewtopic.php?id=17994
  175     
  176     [2] 52930f30ae8dc2c9dd1f64d2df654d9f1a1afb8a
  177         Refactor load_proc_partitions_info_cache() a bit (#131)
  178     
  179     Closes !83 - Fix recognition of SD/MMC device names
  180 
  181 2021-05-19  Yuri Chornoivan <yurchor@ukr.net>
  182 
  183     Update Ukrainian translation
  184 
  185 2021-05-18  Anders Jonsson <anders.jonsson@norsjovallen.se>
  186 
  187     Update Swedish translation
  188 
  189 2021-05-15  Curtis Gedak <gedakc@gmail.com>
  190 
  191     Replace deprecated gtk_show_uri() method for help window (!82)
  192     
  193     The gtk_show_uri() [1] method was deprecated as of gtk3 version 3.22 and
  194     has been replaced with gtk_show_uri_on_window [2].
  195     
  196     [1] https://developer.gnome.org/gtk3/stable/gtk3-Filesystem-utilities.html#gtk-show-uri
  197     [2] https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.7
  198     
  199     Note that AppInfo::launch_uris() has been removed because with
  200     glib/glibmm >= 2.58 AppInfo::launch_uris() always reports success even
  201     when yelp is not launched and in such cases prevents the dialog
  202     reporting the error from being displayed.
  203     
  204     Closes !82 - Replace deprecated gtk_show_uri() method for help window
  205 
  206 2021-05-17  Seong-ho Cho <shcho@gnome.org>
  207 
  208     Update Korean translation
  209 
  210 2021-05-11  Ask Hjorth Larsen <asklarsen@gmail.com>
  211 
  212     Updated Danish translation
  213 
  214 2021-05-04  Hugo Carvalho <hugokarvalho@hotmail.com>
  215 
  216     Update Portuguese translation
  217 
  218 2021-05-03  Curtis Gedak <gedakc@gmail.com>
  219 
  220     Append -git to version for continuing development
  221 
  222 2021-05-03  Curtis Gedak <gedakc@gmail.com>
  223 
  224     ==========   gparted-1.3.0   ==========
  225 
  226 2021-05-01  Jiri Grönroos <jiri.gronroos@iki.fi>
  227 
  228     Update Finnish translation
  229 
  230 2021-05-01  Piotr Drąg <piotrdrag@gmail.com>
  231 
  232     Update Polish translation
  233 
  234 2021-04-27  Ngọc Quân Trần <vnwildman@gmail.com>
  235 
  236     Update Vietnamese translation
  237 
  238 2021-04-26  Fran Dieguez <frandieguez@gnome.org>
  239 
  240     Update Galician translation
  241 
  242 2021-04-26  Kukuh Syafaat <kukuhsyafaat@gnome.org>
  243 
  244     Update Indonesian translation
  245 
  246 2021-04-26  Fran Dieguez <frandieguez@gnome.org>
  247 
  248     Update Galician translation
  249 
  250 2021-04-26  Hannie Dumoleyn <hannie@ubuntu-nl.org>
  251 
  252     Update Dutch translation
  253 
  254 2021-04-26  Hannie Dumoleyn <hannie@ubuntu-nl.org>
  255 
  256     Update Dutch translation
  257 
  258 2021-04-26  Daniel Mustieles <daniel.mustieles@gmail.com>
  259 
  260     Updated Spanish translation
  261 
  262 2021-04-26  Daniel Mustieles <daniel.mustieles@gmail.com>
  263 
  264     Updated Spanish translation
  265 
  266 2021-04-26  Baurzhan Muftakhidinov <baurthefirst@gmail.com>
  267 
  268     Update Kazakh translation
  269 
  270 2021-04-25  Claude Paroz <claude@2xlibre.net>
  271 
  272     Updated French translation
  273 
  274 2021-04-25  Rafael Fontenelle <rafaelff@gnome.org>
  275 
  276     Update Brazilian Portuguese translation
  277 
  278 2021-04-25  Daniel Șerbănescu <daniel@serbanescu.dk>
  279 
  280     Update Romanian translation
  281 
  282 2021-04-25  Yuri Chornoivan <yurchor@ukr.net>
  283 
  284     Update Ukrainian translation
  285 
  286 2021-04-25  Daniel Șerbănescu <daniel@serbanescu.dk>
  287 
  288     Update Romanian translation
  289 
  290 2021-04-25  Anders Jonsson <anders.jonsson@norsjovallen.se>
  291 
  292     Update Swedish translation
  293 
  294 2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
  295 
  296     Mark remaining get_filesystem_*() methods as returning const strings
  297 
  298 2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
  299 
  300     Comment differences between FileSystem::execute_command() methods
  301 
  302 2021-04-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
  303 
  304     Report this LUKS passphrase request reason as resize (#59)
  305     
  306     So far when prompting for the LUKS passphrase the dialog always looks
  307     like this:
  308     
  309         +------------------------------------------------+
  310         |           LUKS Passphrase /dev/sdb1            |
  311         +------------------------------------------------+
  312         | Enter LUKS passphrase to open /dev/sdb1        |
  313         | Passphrase:    [                             ] |
  314         |                                                |
  315         |                                                |
  316         |                          [ Cancel ] [ Unlock ] |
  317         +------------------------------------------------+
  318     
  319     Specifically the first line of the dialog says the reason to provide the
  320     passphrase is to open the encryption mapping.  Now the passphrase may
  321     also be requested when resizing the encryption mapping, as part of a
  322     resize of check operation, show the appropriate reason in the password
  323     dialog.
  324     
  325     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  326                  to read on input"
  327 
  328 2021-04-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
  329 
  330     Also prompt for LUKS password as required for check operation (#59)
  331     
  332     A check operation involves (1) checking the file system, (2) growing the
  333     encryption volume and (3) growing the file system.  Therefore prompt for
  334     the LUKS passphrase as required when composing a check operation too.
  335     
  336     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  337                  to read on input"
  338 
  339 2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
  340 
  341     Pass LUKS password as needed when resizing open mapping (#59)
  342     
  343     This is the final piece which enables GParted to pass the LUKS
  344     passphrase when resizing an open LUKS encryption mapping when
  345     'cryptsetup resize' will prompt for it.
  346     
  347     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  348                  to read on input"
  349 
  350 2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
  351 
  352     Add ability for small writes to stdin of operation tracked child processes (#59)
  353     
  354     This is the equivalent to what was previously done when adding opening
  355     of LUKS mappings.  Namely to add a way to pass the LUKS passphrase to
  356     'cryptsetup luksOpen' via standard input.  Previously the functionality
  357     was added to Utils::execute_command() [1].  Now it is also needed to
  358     pass the LUKS passphrase to 'cryptsetup resize', which is executed as
  359     part of applying resize and check operations to an encrypted file
  360     system.  So add this functionality to FileSystem::execute_command().
  361     
  362     For now writing to stdin is only needed for the one variant of
  363     FileSystem::execute_command() which doesn't have progress tracking
  364     callbacks.  Writing to stdin can easily be added to the other progress
  365     tracking callback variants of execute_command() when needed.
  366     
  367     [1] 8dff80edc65b2923b400ddadebacf9bcf378d09f
  368         Add ability for small writes to stdin of child processes (#795617)
  369     
  370     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  371                  to read on input"
  372 
  373 2021-04-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
  374 
  375     Extract common code into generate_encryption_mapping_name() (#59)
  376     
  377     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  378                  to read on input"
  379 
  380 2021-03-26  Mike Fleetwood <mike.fleetwood@googlemail.com>
  381 
  382     Ask for LUKS passphrase for resize operation as required (#59)
  383     
  384     When composing a resize operation on an open encryption mapping, use the
  385     existing LUKS password dialog to prompt for the passphrase, if and only
  386     if 'cryptsetup resize' will prompt and GParted doesn't already have a
  387     password.  'cryptsetup resize' will prompt for a LUKS passphrase when
  388     the passphrase was stored in the kernel keyring service,
  389     key_loc == KEYLOC_KeyRing.  See the previous commit "Capture LUKS
  390     mapping master encryption key location (#59)" for more details.
  391     
  392     As commented in the code GParted specifically doesn't support the case
  393     where the LUKS passphrase is changed while GParted is running and it
  394     knew the old passphrase.  When resizing an open encryption mapping
  395     GParted will just pass the old out of date passphrase it knows and the
  396     resize will fail like this:
  397     
  398         # cryptsetup status sdb2_crypt | egrep 'type|key location'
  399           type:         LUKS2
  400           key location: keyring
  401         # dmsetup table --target crypt
  402         sdb2_crypt: 0 491520 crypt aes-xts-plain64 :64:logon:cryptsetup:3d040240-97ba-4559-af98-72c3be500498-d0 0 8:18 32768
  403     
  404         # echo -n oldpassword | cryptsetup -v --size 491520 resize sdb2_crypt
  405         No key available with this passphrase.
  406         Command failed with code -2 (no permission or bad passphrase).
  407         # echo $?
  408         2
  409     
  410     To work around this either close and restart GParted or close and reopen
  411     the encryption mapping.  The former because GParted doesn't save
  412     passwords across a restart so will prompt and the latter because GParted
  413     will use the wrong old passphrase to try to open the mapping and then
  414     prompt for the correct passphrase until successfully opened.
  415     
  416     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  417                  to read on input"
  418 
  419 2021-03-26  Mike Fleetwood <mike.fleetwood@googlemail.com>
  420 
  421     Capture LUKS mapping master encryption key location (#59)
  422     
  423     ISSUE OVERVIEW
  424     
  425     When GParted tries to resize an open LUKS encryption mapping and the
  426     volume (master) key was stored in the kernel keyring service [1] it
  427     fails like this:
  428     
  429         Check and repair file system ([Encrypted] ext4) on /dev/...(ERROR)
  430         + calibrate /dev/sdd1                                      (SUCCESS)
  431         + check file system on /dev/mapper/sdd1_crypt for errors...(SUCCESS)
  432         + grow encryption volume to fill the partition             (ERROR)
  433           + cryptsetup -v resize 'sdd1_crypt'                      (ERROR)
  434               Command failed with code -1 (wrong or missing parameters).
  435               Nothing to read on input.
  436     
  437     This error occurs with cryptsetup >= 2.0, kernel >= 4.10 and LUKS2
  438     format because the crypt Device-Mapper target no longer has the volume
  439     key so cryptsetup resize prompts for a passphrase, but GParted doesn't
  440     provide it.
  441     
  442     THIS COMMIT
  443     
  444     Additionally capture the location of the volume (master) key location
  445     for active encryption mappings.  Do this the using the same method that
  446     cryptsetup uses [2][3].  Namely if the first character of the KEY is a
  447     ":" then the key *was* stored in the kernel keyring service, otherwise
  448     it *is* store in the Device-Mapper crypt target as previously.
  449     
  450         # echo -n badpassword | cryptsetup luksFormat --type luks1 /dev/sdb1 -
  451         # echo -n badpassword | cryptsetup luksOpen /dev/sdb1 sdb1_crypt
  452         # cryptsetup status sdb1_crypt | egrep 'type|key location'
  453           type:         LUKS1
  454           key location: dm-crypt
  455     
  456         # echo -n badpassword | cryptsetup luksFormat --type luks2 /dev/sdb2 -
  457         # echo -n badpassword | cryptsetup luksOpen /dev/sdb2 sdb2_crypt
  458         # cryptsetup status sdb2_crypt | egrep 'type|key location'
  459           type:         LUKS2
  460           key location: keyring
  461     
  462         # dmsetup table --target crypt
  463         sdb1_crypt: 0 520192 crypt aes-xts-plain64 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 8:17 4096
  464         sdb2_crypt: 0 491520 crypt aes-xts-plain64 :64:logon:cryptsetup:3d040240-97ba-4559-af98-72c3be500498-d0 0 8:18 32768
  465                                                    ^
  466     First character of the KEY field --------------'
  467     
  468     [1] Integration with the kernel keyring service
  469         https://gitlab.com/cryptsetup/cryptsetup/blob/v2.0.0/docs/Keyring.txt
  470         "
  471         Starting with cryptsetup 2.0 we load [Volume Key] VK in kernel
  472         keyring by default for LUKSv2 devices ...
  473     
  474         In summary, the key description visible in dm-crypt table line is a
  475         reference to VK that usually no longer exists in kernel keyring
  476         service if you used cryptsetup to for device activation.
  477         "
  478     
  479     [2] cryptsetup/v2.3.5/lib/libdevmapper.c:_dm_target_query_crypt()
  480         https://gitlab.com/cryptsetup/cryptsetup/-/blob/v2.3.5/lib/libdevmapper.c#L2031
  481             if (key_[0] == ':')
  482                 *act_flags |= CRYPT_ACTIVATE_KEYRING_KEY;
  483     
  484     [3] cryptsetup/v2.3.5/src/cryptsetup.c:action_status()
  485         https://gitlab.com/cryptsetup/cryptsetup/-/blob/v2.3.5/src/cryptsetup.c#L839
  486             log_std("  key location: %s\n", (cad.flags & CRYPT_ACTIVATE_KEYRING_KEY) ? "keyring" : "dm-crypt");
  487     
  488     Closes #59 - Resize of LUKS2 encrypted file system fails with "Nothing
  489                  to read on input"
  490 
  491 2021-04-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
  492 
  493     Ignore libparted unrecognised disk label message from encryption mappings (#152)
  494     
  495     When GParted probes an open encryption mapping which is either blank or
  496     contains a file system which libparted doesn't recognise, such as:
  497     exfat, f2fs, lvm2 pv, minix or reiser4, then the partition also gets
  498     this warning message:
  499         /dev/mapper/sdb11_crypt: unrecognised disk label
  500     
  501     Clear the message so that it isn't shown in the GUI.
  502     
  503     Note that the message is still written to stderr by GParted, like all
  504     libparted exceptions are.  This is done by GParted's libparted exception
  505     handler:
  506         GParted_Core::ped_exception_handler()
  507           _ped_exception_handler()
  508     
  509     Closes #152 - GParted crashed when trying to probe an encrypted
  510                   partition containing content that libparted doesn't
  511                   recognise
  512 
  513 2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
  514 
  515     Reorder cases in set_device_and_disk() and use if fail return early (#152)
  516     
  517     The previous commit "Resolve empty drive displayed as blank minor logic
  518     issue (#152)" left the code in set_device_and_disk() some what
  519     unsightly.
  520     
  521     Refactor the whole function.  Use if fail return early pattern for
  522     failure of the get_device() call at the start of the function.  Reorder
  523     the 4 cases into a single depth if then else if chain.  Hopefully this
  524     is a little easier to follow.
  525     
  526     Closes #152 - GParted crashed when trying to probe an encrypted
  527                   partition containing content that libparted doesn't
  528                   recognise
  529 
  530 2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
  531 
  532     Resolve empty drive displayed as blank minor logic issue (#152)
  533     
  534     The previous commit "Remove coding landmine in get_disk() (#152)" made
  535     an empty drive without a disk label (partition table) display as
  536     nothing, instead of the normal single unallocated partition with warning
  537     "unrecognised disk label".
  538     
  539     The previous commit said:
  540         3. The two remaining direct calls to get_disk() where the strict
  541            parameter is explicitly set to false, from set_device_from_disk()
  542            and detect_filesystem_in_encryption_mapping(), are when scanning.
  543            As the pass strict=false they don't allow the PedDevice deletion
  544            to occur if no recognised disk label is found.
  545     
  546     This is true, but get_disk(..., strict=false) additionally returned true
  547     even if there was no disk label.  And in set_device_from_disk() the
  548     empty drive case is inside the if branch of the get_disk() call
  549     returning true.
  550     
  551     Simply fix this by calling get_disk(), ignoring the return value.
  552     
  553     Closes #152 - GParted crashed when trying to probe an encrypted
  554                   partition containing content that libparted doesn't
  555                   recognise
  556 
  557 2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
  558 
  559     Remove coding landmine in get_disk() (#152)
  560     
  561     get_disk() is the wrapper around libparted's ped_disk_new() which reads
  562     a disk label from the specified device and if successful creates the in
  563     memory PedDisk object to represent it.  In the case that libparted
  564     doesn't recognise a disk label or a file system, having get_disk() go
  565     and destroy the passed in PedDevice object via parameter lp_device is
  566     very unexpected behaviour hence describing it as a coding landmine.
  567     
  568     BACKGROUND
  569     
  570     1. Early on GParted only worked with devices with valid disk labels.
  571        FileSystem.h:open_device_and_disk() required both ped_device_get()
  572        and ped_disk_new() to succeed or neither to succeed.
  573     2. Commit [1] added support for devices which didn't yet have a disk
  574        label.  open_device_and_disk() had default parameter strict=true
  575        added.  While scanning strict=false was passed which allowed
  576        open_device_and_disk() to return success if only ped_device_get()
  577        succeeded and ped_disk_new() failed when the disk was empty.  All
  578        other times open_device_and_disk() was called with default
  579        strict=true, still requiring both or neither to succeed.
  580     3. Commit [2] added support for whole disk file systems.  The now named
  581        get_device_and_disk() had it's functionality split between
  582        get_device() and get_disk().  This result in the code landmine being
  583        left behind: get_disk() destroying the passed device object if
  584        default parameter strict=true and no disk label or file system was
  585        detected.
  586     
  587     ANALYSIS
  588     
  589     1. Since support for whole disk file systems [2] all current calls to
  590        get_device_and_disk() let the strict parameter default to true and
  591        are only called on known partitions within disk labels when applying
  592        a change to that partition.  Therefore they don't care about the
  593        behaviour of get_disk(), just that get_device_and_disk() maintains
  594        that both ped_device_get() and ped_disk_new() succeed or neither
  595        succeed.
  596     2. Two direct calls to get_disk() where the strict parameter defaults to
  597        true, from calibrate_partition() and erase_filesystem_signatures(),
  598        only do so on known partitions within disk labels as part of applying
  599        a change to that partition.  Therefore ped_disk_new() will succeed
  600        and so PedDevice isn't deleted when not wanted.
  601     3. The two remaining direct calls to get_disk() where the strict
  602        parameter is explicitly set to false, from set_device_from_disk() and
  603        detect_filesystem_in_encryption_mapping(), are when scanning.  As the
  604        pass strict=false they don't allow the PedDevice deletion to occur if
  605        no recognised disk label is found.
  606     
  607     FIX
  608     
  609     Remove the strict parameter from get_disk() and get_device_and_disk() as
  610     it's no longer needed.  Remove the code landmine by removing the side
  611     affect of destroying the PedDevice object if a disk label isn't found.
  612     Make sure get_device_and_disk() maintains the all or nothing behaviour.
  613     
  614     Also don't pass lp_device by reference to a pointer to get_disk() so the
  615     code can't change where lp_device points.
  616     
  617     [1] 038c5c5d99ad842f1a57f12222c884be29f4df4f
  618         P (special thanks to mantiena-baltix for bringing this issue to my
  619     
  620     [2] 51ac4d56489653854cd22787238a14bfa66a6ad4
  621         Split get_device_and_disk() into two (#743181)
  622     
  623     Closes #152 - GParted crashed when trying to probe an encrypted
  624                   partition containing content that libparted doesn't
  625                   recognise
  626 
  627 2021-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
  628 
  629     Correctly const and assert detect_filesystem() parameters (#152)
  630     
  631     As discussed in the previous commit "Don't crash probing libparted
  632     unrecognised encrypted file system (#152)", detect_filesystem() accepted
  633     a NULL lp_device pointer and dereferenced it leading to the crash.
  634     Document the requirement for lp_device parameter to be non-NULL via an
  635     assert and also correctly const the parameters.
  636     
  637     This forces needing to const the lp_partition parameter to
  638     get_partition_path() too.  Also assert it's non-NULL requirement.
  639     
  640     Closes #152 - GParted crashed when trying to probe an encrypted
  641                   partition containing content that libparted doesn't
  642                   recognise
  643 
  644 2021-04-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
  645 
  646     Don't crash probing libparted unrecognised encrypted file system (#152)
  647     
  648     Create a LUKS encrypted partition and open it.  Then either leave the
  649     contents blank or create a file system which libparted doesn't
  650     recognise, such as: exfat, f2fs, lvm2 pv, minix or reiser4.  When
  651     GParted probes the disk device it crashes.
  652     
  653         # echo -n badpassword | cryptsetup luksFormat /dev/sdb11
  654         # echo -n badpassword | cryptsetup luksOpen /dev/sdb11 sdb11_crypt
  655         # ./gpartedbin /dev/sdb
  656         GParted 1.2.0-git
  657         configuration (none)
  658         libparted 3.1
  659         /dev/mapper/sdb11_crypt: unrecognised disk label
  660         Segmentation fault (core dumped)
  661     
  662     Backtrace:
  663         #0  0x0000000000460f68 in GParted::GParted_Core::detect_filesystem(_PedDevice*, _PedPartition*, std::vector<Glib::ustring, std::allocator<Glib::ustring> >&)
  664             (lp_device=0x0, lp_partition=0x0, messages=std::vector of length 0, capacity 0)
  665             at GParted_Core.cc:1235
  666         #1  0x00000000004615a6 in GParted::GParted_Core::detect_filesystem_in_encryption_mapping(Glib::ustring const&, std::vector<Glib::ustring, std::allocator<Glib::ustring> >&)
  667             (path=..., messages=std::vector of length 0, capacity 0)
  668             at GParted_Core.cc:1096
  669         #2  0x00000000004647c8 in GParted::GParted_Core::set_luks_partition(GParted::PartitionLUKS&)
  670             (this=this@entry=0x7fff43f974e0, partition=...)
  671             at GParted_Core.cc:1011
  672         #3  0x000000000046511b in GParted::GParted_Core::set_device_partitions(GParted::Device&, _PedDevice*, _PedDisk*)
  673             (this=this@entry=0x7fff43f974e0, device=..., lp_device=0x7efc780008c0, lp_disk=0x7efc78000d10)
  674             at GParted_Core.cc:883
  675         #4  0x00000000004658e3 in GParted::GParted_Core::set_device_from_disk(GParted::Device&, Glib::ustring const&)
  676             (this=this@entry=0x7fff43f974e0, device=..., device_path=...)
  677             at GParted_Core.cc:704
  678         #5  0x0000000000465fff in GParted::GParted_Core::set_devices_thread(std::vector<GParted::Device, std::allocator<GParted::Device> >*)
  679             (this=0x7fff43f974e0, pdevices=0x7fff43f96bc8)
  680             at GParted_Core.cc:266
  681         #6  0x00007efc99ba413d in call_thread_entry_slot ()
  682             at /lib64/libglibmm-2.4.so.1
  683         #7  0x00007efc97dc8555 in g_thread_proxy ()
  684             at /lib64/libglib-2.0.so.0
  685         #8  0x00007efc96ab4ea5 in start_thread () at /lib64/libpthread.so.0
  686         #9  0x00007efc967dd9fd in clone () at /lib64/libc.so.6
  687     
  688     The relevant sequence of events goes like this:
  689         detect_filesystem_in_encryption_mapping(path, ...)
  690           lp_device = NULL
  691           get_device(path, lp_device)
  692             lp_device = ped_device_get(path.c_str())
  693             return true
  694           lp_disk = NULL
  695           lp_partition = NULL
  696           get_disk(lp_device, lp_disk)  // + default parameter strict=true
  697             lp_disk = ped_disk_new(lp_device)
  698               // No libparted recognised disk label or file system found, so
  699               // NULL returned.
  700             destroy_device_and_disk(lp_device, lp_disk)
  701               ped_device_destroy(lp_device)
  702               lp_device = NULL
  703             return false
  704           detect_filesystem(lp_device, lp_partition, ...)
  705             path = lp_device->path
  706     
  707     The key points are:
  708     1. get_device() created a PedDevice object pointed to by lp_device;
  709     2. get_disk() didn't find a libparted recognised disk label or file
  710        system but also unexpectedly destroyed the PedDevice object and
  711        assigned NULL to lp_device;
  712     3. detect_filesystem() dereferenced lp_device assuming it was still
  713        valid.
  714     
  715     Implement the simplest possible fix by telling get_disk() to not
  716     destroy the needed PedDevice object when there's no recognised content.
  717     This is the same as how get_disk() is called in set_device_from_disk().
  718     
  719     Closes #152 - GParted crashed when trying to probe an encrypted
  720                   partition containing content that libparted doesn't
  721                   recognise
  722 
  723 2021-04-14  Hugo Carvalho <hugokarvalho@hotmail.com>
  724 
  725     Update Portuguese translation
  726 
  727 2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
  728 
  729     Also use libparted to probe for encrypted file systems (#148)
  730     
  731     Even though blkid is considered mandatory [1] GParted should still
  732     perform reasonably when blkid is not available, provided that is not too
  733     onerous a task.  Also use libparted file system identification inside
  734     encryption mappings.
  735     
  736     [1] 749a2495716a82a7287fad943109b6cfb927245c
  737         Document blkid command as a mandatory requirement (#753436)
  738     
  739     Closes 148 - Encrypted file systems are no longer recognised
  740 
  741 2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
  742 
  743     Probe encryption mappings as needed using blkid (#148)
  744     
  745     GParted no longer recognises file systems inside LUKS encryption, apart
  746     from the few recognised by GParted's internal detection.  Bisected to
  747     this commit:
  748         8b35892ea59958aa1eec596a48a36b0fa7950dca
  749         Pass device and partition names to blkid (#131)
  750     
  751     Prior to this commit blkid was run querying all known block devices
  752     including active encryption mappings, hence prior recognition.  With
  753     this commit blkid was run only for named or found disk devices and
  754     associated found partitions from /proc/partitions, so no more
  755     recognition of encrypted file systems.
  756     
  757     Fix by running blkid on the encryption mapping just before querying for
  758     the file system.  This restores the level of functionality that existed
  759     before.
  760     
  761     Closes 148 - Encrypted file systems are no longer recognised
  762 
  763 2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
  764 
  765     Extract some code into detect_filesystem_in_encryption_mapping() (#148)
  766     
  767     To avoid making set_luks_partition() more complicated extract the file
  768     system detection portion into a new function.
  769     
  770     Closes 148 - Encrypted file systems are no longer recognised
  771 
  772 2021-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
  773 
  774     Make FS_Info (blkid) cache incrementally loadable (#148)
  775     
  776     Since changes for issue #131 "GParted hangs when non-named device is
  777     hung" FS_Info cache is initialised, cleared and loaded via one call to
  778     load_cache_for_paths().  It runs blkid for named or found disk devices
  779     and associated found partitions from /proc/partitions, rather than
  780     running blkid and letting it report for all block devices.
  781     
  782     To avoid the possibility of using blkid on an encryption mapping on a
  783     non-specified and possibly hung block device GParted can't just specify
  784     all encryption mappings.  Instead only encryption mappings which belong
  785     to the above identified block devices should be probed.  That requires
  786     identifying LUKS encryption data in the block devices first so will
  787     require subsequently loading additional data into the FS_Info cache and
  788     running blkid again.
  789     
  790     To accommodate this make the FS_Info cache incrementally loadable,
  791     rather than doing everything in a single call to load_cache_for_paths().
  792     Have a separate clear_cache() call which initialises and clears the
  793     cache and make load_cache_for_paths() just run blkid and insert data for
  794     the named paths.
  795     
  796     Closes 148 - Encrypted file systems are no longer recognised
  797 
  798 2021-04-02  Nathan Follens <nfollens@gnome.org>
  799 
  800     Update Dutch translation
  801 
  802 2021-03-27  Anders Jonsson <anders.jonsson@norsjovallen.se>
  803 
  804     Update Swedish translation
  805 
  806 2021-03-25  Hugo Carvalho <hugokarvalho@hotmail.com>
  807 
  808     Update Portuguese translation
  809 
  810 2021-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
  811 
  812     Update HACKING file with coding style hints and tips
  813 
  814 2021-03-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
  815 
  816     Explicitly read the reiser4 volume UUID when present
  817     
  818     Reiser4 has introduced new disk format which includes support for
  819     spanning the file system over multiple block devices (subvolumes)
  820     [1][2].  As such the output of the debugfs.reiser4 for the UUID has
  821     changed slightly.  So far the new reiser4progs package (version 2.0.x)
  822     is only available as a Debian experimental package.
  823     
  824     Using reiser4progs 1.2.1 the old output was like this:
  825     
  826         $ debugfs.reiser4 test.img
  827         debugfs.reiser4 1.2.1
  828         Format release: 4.0.2
  829         Copyright (C) 2001-2005 by Hans Reiser, licensing governed by reiser4progs/COPYING.
  830     
  831         Master super block (16):
  832         magic:          ReIsEr4
  833         blksize:        4096
  834         format:         0x0 (format40)
  835         uuid:           1116afce-99fd-4a6e-94cb-2d9f19c91d67
  836         label:          <none>
  837     
  838         ...
  839     
  840     With reiser4progs 2.0.4 the new output is like this:
  841     
  842         $ debugfs.reiser4 test.img
  843         debugfs.reiser4
  844         Package Version: 2.0.4
  845         Software Framework Release: 5.1.3
  846         Copyright (C) 2001-2005 by Hans Reiser, licensing governed by reiser4progs/COPYING.
  847         Master super block (16):
  848         magic:          ReIsEr4
  849         blksize:        4096
  850         volume:         0x1 (asym)
  851         distrib:        0x1 (fsx32m)
  852         format:         0x1 (format41)
  853         description:    Standard layout for logical volumes.
  854         stripe bits:    14
  855         mirror id:      0
  856         replicas:       0
  857         volume uuid:    9538bfa3-5694-4abe-864c-edc288a9d801
  858         subvol uuid:    d841c692-2042-49e6-ac55-57e454691782
  859         label:          <none>
  860     
  861         ...
  862     
  863     GParted happens to read the correct UUID just because the first matching
  864     "uuid" string in the output is the volume UUID.  Make the code more
  865     robust by explicitly reading the volume uuid when labelled as such.
  866     
  867     [1] Logical Volumes Howto
  868         https://reiser4.wiki.kernel.org/index.php/Logical_Volumes_Howto
  869     [2] Logical Volumes Background
  870         https://reiser4.wiki.kernel.org/index.php/Logical_Volumes_Background
  871 
  872 2021-03-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
  873 
  874     Refactor reiser4::read_uuid() into if fail return early pattern
  875 
  876 2021-03-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
  877 
  878     Ignore test failure when reiser4 reports null UUID (#145)
  879     
  880     The GitLab CI ubuntu_test job has occasionally been failing like this,
  881     perhaps once every few weeks or so.
  882     
  883         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4
  884         test_SupportedFileSystems.cc:569: Failure
  885         Expected: (m_partition.uuid.size()) >= (9U), actual: 0 vs 9
  886         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4, where GetParam() = 24 (17 ms)
  887         [----------] 1 test from My/SupportedFileSystemsTest (17 ms total)
  888     
  889     Turns out there are 2 bugs in resier4progs.  One causes debugfs.reiser4
  890     to report a null UUID if the first byte of the UUID happens to be zero
  891     [1], and the other cases mkfs.resier4 to write a corrupted UUID,
  892     sometimes a null (all zeros) UUID [2].
  893     
  894     There is a 1 in 256 chance of getting a null UUID [2] when creating and
  895     reading a reiser4 file system, hence the occasional failure of the CI
  896     job.  The centos_test job isn't affected because CentOS doesn't have the
  897     reiser4progs package.
  898     
  899     Fix this by detecting when reiser4 reports a null UUID and assign a
  900     dummy UUID to make the test pass.  This does mean that there is a 1 in
  901     256 chance of not detecting a true failure.  However that still means
  902     there is a 255 in 256 chance of detecting a true failure.  That's good
  903     odds.  When a null UUID is detected for a reiser4 file system the test
  904     output looks like this:
  905     
  906         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4
  907         test_SupportedFileSystems.cc:580: Ignore test failure of a null UUID.
  908         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4 (46 ms)
  909     
  910     [1] https://github.com/edward6/reiser4progs/commit/4802cdb18ae03031d0e51a58b6655f3b99021ec2
  911         Fix up repair_master_print()
  912     
  913     [2] https://github.com/edward6/reiser4progs/commit/44cc024f398f60adef1519426d65f3f081ee826a
  914         Stop occasionally making file systems with null UUIDs
  915     
  916     Closes #145 - Sporadic failure of test case
  917                   My/SupportedFileSystemsTest.CreateAndReadUUID/reiser4
  918 
  919 2021-03-13  Jordi Mas <jmas@softcatala.org>
  920 
  921     Update Catalan translation
  922 
  923 2021-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
  924 
  925     Print kernel version, etc in GitLab CI (#147)
  926     
  927     Print the kernel version and supported file systems inside the GNOME
  928     GitLab CI jobs as a debugging aid.  Kernel version helps identify the
  929     CI job runner's distribution to identify kernel features.  Supported
  930     file systems identifies which ones can be mounted, should that be
  931     possible in future.  Print supported file systems before and after the
  932     tests because checking for support may load additional modules.  See
  933     calls to Utils::kernel_supports_fs() for: btrfs, jfs, nilfs2 and xfs.
  934     
  935     Closes #147 - GitLab CI test failure from *.CreateAndGrow/jfs
  936 
  937 2021-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
  938 
  939     Exclude more GitLab CI file system tests needing loop devices (#147)
  940     
  941     For the first time ever the ubuntu_test GitLab CI job failed running the
  942     JFS grow test like this.  Fragment from tests/test-suite.log:
  943     
  944         [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/jfs
  945         test_SupportedFileSystems.cc:387: Failure
  946         Failed
  947         create_loopdev(): Execute: losetup --find --show 'test_SupportedFileSystems.img'
  948         losetup: cannot find an unused loop device
  949         create_loopdev(): Losetup failed with exit status 1
  950         create_loopdev(): Failed to create required loop device
  951         Error: Could not stat device  - No such file or directory.
  952         test_SupportedFileSystems.cc:446: Failure
  953         Value of: lp_device != NULL
  954           Actual: false
  955         Expected: true
  956         test_SupportedFileSystems.cc:649: Failure
  957         Value of: m_fs_object->create(m_partition, m_operation_detail)
  958           Actual: false
  959         Expected: true
  960         Operation details:
  961         mkfs.jfs -q -L '' ''    00:00:00  (ERROR)
  962         mkfs.jfs version 1.1.15, 04-Mar-2011
  963     
  964         The system cannot find the specified device.
  965     
  966         detach_loopdev(): Execute: losetup --detach ''
  967         losetup: : failed to use device: No such device
  968         detach_loopdev(): Losetup failed with exit status 1
  969         detach_loopdev(): Failed to detach loop device.  Test NOT affected
  970         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/jfs, where GetParam() = 17 (24 ms)
  971     
  972     JFS can only be grown when mounted by the kernel and GParted only
  973     enables JFS grow support when, among other things, kernel support is
  974     detected.
  975     
  976     Unknowingly the JFS grow test had always previously been skipped, even
  977     in the ubuntu_test CI job which installs jfsutils, because the kernel
  978     didn't support JFS.  Capture of this test from another run of the
  979     ubuntu_test CI job:
  980     
  981         [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/jfs
  982         test_SupportedFileSystems.cc:641: Skip test.  grow not supported or support not found
  983         [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/jfs (0 ms)
  984     
  985     Plus additional debug added into the job based on what
  986     Utils::kernel_supports_fs() does to identify kernel support:
  987     
  988         $ fgrep jfs /proc/filesystems || true
  989         $ modprobe jfs || true
  990         modprobe: FATAL: Module jfs not found in directory /lib/modules/3.10.0-1160.11.1.el7.x86_64
  991         $ fgrep jfs /proc/filesystems || true
  992     
  993     Therefore until now every GitLab job runner machine kernel didn't
  994     support JFS, but for the first time ever this ubuntu_test job ran on a
  995     runner machine where the kernel did support JFS, hence the attempt to
  996     use losetup.
  997     
  998     Examining test_SupportFileSystems.cc there are 24 file system tests
  999     which specify SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS(), but only
 1000     17 exclusions in .gitlab-ci.yaml [1].  The 7 tests without exclusions
 1001     are:
 1002     
 1003         *.CreateAndReadLabel/lvm2pv
 1004         *.CreateAndReadUUID/lvm2pv
 1005         *.CreateAndWriteLabel/lvm2pv
 1006         *.CreateAndWriteUUID/lvm2pv
 1007         *.CreateAndGrow/jfs
 1008         *.CreateAndGrow/nilfs2
 1009         *.CreateAndShrink/nilfs2
 1010     
 1011     For LVM2 PVs reading and writing of labels and UUIDs aren't implemented
 1012     (only reading of UUIDs could be supported as the others are impossible)
 1013     so those tests are always skipped.  Add unit test exclusions just for
 1014     completeness.
 1015     
 1016     JFS grow is this case.  NILFS2 grow and shrink are more cases where
 1017     kernel support is needed.  Add unit test exclusions to stop attempting
 1018     to run JFS and NILFS2 resizing tests, which don't currently work because
 1019     losetup doesn't work in the GitLab CI docker images [1].
 1020     
 1021     [1] 39fdfe51da4bddecb2c99a9b544b270130423e72
 1022         Exclude unit tests needing losetup in Docker CI image (!59)
 1023     
 1024     Closes #147 - GitLab CI job failure from *.CreateAndGrow/jfs
 1025 
 1026 2021-03-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1027 
 1028     Pass constant string by reference to lvm2_pv_size_to_num()
 1029     
 1030     It is common C++ practice to pass a constant object by reference to
 1031     avoid constructing a duplicate object for pass by value [1].
 1032     
 1033     [1] How to pass objects to functions in C++?
 1034         https://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/2139254#2139254
 1035 
 1036 2021-03-01  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1037 
 1038     Install gpartedbin into @libexecdir@ (#85)
 1039     
 1040     Executables which are not intended for execution by users, but by other
 1041     programs, should be installed into /usr/libexec [1][2].  gpartedbin
 1042     falls into this category.  Update it's installation accordingly.
 1043     
 1044     Standard Autotools details: gpartedbin will be installed into
 1045     EPREFIX/libexec by default.  To install gpartedbin into a different
 1046     directory set libexecdir when configuring the build system.  Like this
 1047     from git:
 1048         ./autogen.sh --libexecdir=DIR
 1049     or like this from tar release:
 1050         ./configure --libexecdir=DIR
 1051     
 1052     [1] Filesystem Hierarchy Standard, version 3.0,
 1053         4.7. /usr/libexec : Binaries run by other programs (optional)
 1054         https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s07.html
 1055         "/usr/libexec includes internal binaries that are not intended to be
 1056         executed directly by users or shell scripts.
 1057         "
 1058     
 1059     [2] GNU Coding Standards, June 12, 2020,
 1060         7.2.5 Variables for Installation Directories
 1061         https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
 1062         "libexecdir
 1063         The directory for installing executable programs to be run by other
 1064         programs rather than by users.  This directory should normally be
 1065         /usr/local/libexec, but write it as $(exec_prefix)/libexec.  (If you
 1066         are using Autoconf, write it as '@libexecdir@'.)
 1067         "
 1068     
 1069     Closes #85 - Please install gpartedbin under /usr/libexec instead of
 1070                  /usr/sbin
 1071 
 1072 2021-03-08  Aurimas Černius <aurisc4@gmail.com>
 1073 
 1074     Updated Lithuanian translation
 1075 
 1076 2021-03-05  Kukuh Syafaat <kukuhsyafaat@gnome.org>
 1077 
 1078     Update Indonesian translation
 1079 
 1080 2021-02-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1081 
 1082     Update "Detecting BitLocker" URL code comment
 1083     
 1084     The document has moved on the Microsoft website.  Update the URL
 1085     accordingly, and add an Internet Archive URL too, for good measure.
 1086 
 1087 2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1088 
 1089     Rename member variable to default_fs
 1090     
 1091     ... in class Dialog_Partition_New and slightly refactor the code in
 1092     build_filesystems_combo() method which sets it.
 1093     
 1094     Change the name from first_creatable_fs to default_fs to be more
 1095     immediately obvious what the variable represents.  As default_fs is used
 1096     to index the items in the combo_filesystem derived ComboBox, make it's
 1097     type an int to match the type of the parameter passed to
 1098     Gtk::ComboBox::set_active() [1].  Initialise default_fs to -1 (no
 1099     selection) in the class constructor [2], which also allows removal of
 1100     local variable set_first just used to track whether first_creatable_fs
 1101     had been assigned yet or not.
 1102     
 1103     [1] gtkmm: Gtk::ComboBox Class Reference, set_active()
 1104         https://developer.gnome.org/gtkmm/stable/classGtk_1_1ComboBox.html#a4f23cf08e85733d23f120935b235096d
 1105     
 1106     [2] C++ FAQ / Should my constructors use "initialization lists" or
 1107         "assignment"?
 1108         https://isocpp.org/wiki/faq/ctors#init-lists
 1109 
 1110 2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1111 
 1112     Don't rely on unformatted being the last file system type
 1113     
 1114     ... in Dialog_Partition_New::build_filesystems_combo().  set_data()
 1115     populates this->FILESYSTEMS[] vector with supported file systems with
 1116     cleared, unformatted and extended added to the end.  Then
 1117     build_filesystems_combo() adds those items to combo_filesystem, skipping
 1118     extended.  It then makes the last item in the combobox sensitive,
 1119     relying on the fact that it is unformatted.
 1120     
 1121     Refactor the code so build_filesystems_combo() no longer relies on
 1122     unformatted being the last item in combo_filesystem to always enable it.
 1123 
 1124 2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1125 
 1126     Remove unnecessary call to combobox_changed(false)
 1127     
 1128     ... in Dialog_Partition_New::set_data().  As the change signal for
 1129     combo_filesystem has already been connected, combo_changed(false) is
 1130     automatically called by setting the active selection.  Therefore remove
 1131     the unnecessary call.
 1132 
 1133 2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1134 
 1135     Rename combobox_change() parameter to combo_type_changed
 1136     
 1137     "Type" was rather a generic name.  Use "combo_type_changed" which makes
 1138     it clear that the boolean parameter indicates whether a change to
 1139     combo_type or one of the other ComboBoxes triggered this callback.
 1140 
 1141 2021-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1142 
 1143     Fix crash in Create New Partition dialog when changing type (#101)
 1144     
 1145     On an MSDOS partitioned drive, open the Create New Partition dialog and
 1146     change "created as" from Primary Partition to Extended Partition and
 1147     back to Primary Partition.  On Fedora and RHEL/CentOS 8, which builds
 1148     packages with FORTIFY_SOURCE [1][2] and GLIBXX_Assertions [3][4]
 1149     enabled, GParted will crash.
 1150     
 1151     Run GParted built with the default compilation options under valgrind
 1152     and repeat the test.  Multiple out of bounds reads are reported like
 1153     this:
 1154       # valgrind --track-origins=yes ./gpartedbin
 1155       ...
 1156       ==232613== Invalid read of size 8
 1157       ==232613==    at 0x441AF6: GParted::Dialog_Partition_New::combobox_changed(bool) (Dialog_Partition_New.cc:354)
 1158       ==232613==    by 0x443DBD: sigc::bound_mem_functor1<void, GParted::Dialog_Partition_New, bool>::operator()(bool const&) const (mem_fun.h:2066)
 1159     
 1160     Coming from Dialog_Partition_New.cc:
 1161       328  void Dialog_Partition_New::combobox_changed(bool type)
 1162       329  {
 1163       ...
 1164       351      // combo_filesystem and combo_alignment
 1165       352      if ( ! type )
 1166       353      {
 1167     > 354          fs = FILESYSTEMS[combo_filesystem.get_active_row_number()];
 1168     
 1169     When the partition type is changed to Extended the file system is forced
 1170     to be "Extended" too.  This is done in ::combobox_changed() method by
 1171     modifying combo_filesystem to add "Extended", making that the selected
 1172     item and setting the widget as inactive.
 1173     
 1174     Then when the partition type is changed back to primary the file system
 1175     combobox is returned to it's previous state.  This is done by first
 1176     removing the last "Extended" item, making the widget active and setting
 1177     the selected item.  However as "Extended" is the currently selected
 1178     item, removing it forces their to be no selected item and triggers a
 1179     change to combo_filesystem triggering a recursive call to
 1180     ::combobox_changed() where combo_filesystem.get_active_row_number()
 1181     returns -1 (no selection) [5] and on line 354 the code accesses item -1
 1182     of the FILESYSTEMS[] vector.
 1183     
 1184     Fix by setting the new combo_filesystem selection before removing the
 1185     currently selected "Extended" item.  This has the added benefit of only
 1186     triggering a change to combo_filesystem once when the default item is
 1187     selected rather than twice when the currently "Extended" item is removed
 1188     and again when the default item is selected.
 1189     
 1190     [1] [Fedora] Security Features, Compile Time Buffer Checks
 1191         (FORTIFY_SOURCE)
 1192         https://fedoraproject.org/wiki/Security_Features#Compile_Time_Buffer_Checks_.28FORTIFY_SOURCE.29
 1193     
 1194     [2] Enhance application security with FORTIFY_SOURCE
 1195         https://access.redhat.com/blogs/766093/posts/1976213
 1196     
 1197     [3] Security Features Matrix (GLIBXX_Assertions)
 1198         https://fedoraproject.org/wiki/Security_Features_Matrix
 1199     
 1200     [4] GParted 1.2.0-1.fc33 package build.log for Fedora 33
 1201         https://kojipkgs.fedoraproject.org/packages/gparted/1.2.0/1.fc33/data/logs/x86_64/build.log
 1202         CXXFLAGS='-O2 -g ... -Wp,-D_FORTIFY_SOURCE=2
 1203         -Wp,-D_GLIBCXX_ASSERTIONS ...'
 1204     
 1205     [5] gtkmm: Gtk::ComboBox Class Reference, get_active_row_number()
 1206         https://developer.gnome.org/gtkmm/stable/classGtk_1_1ComboBox.html#a53531bc041b5a460826babb8496c363b
 1207     
 1208     Closes #101 - Crash changing Partition type in "Create new partition"
 1209                   dialog
 1210 
 1211 2021-02-20  Yuri Chornoivan <yurchor@ukr.net>
 1212 
 1213     Fix minor typos in comments (!71)
 1214     
 1215     Closes !71 - Fix minor typos in comments
 1216 
 1217 2021-02-23  Anders Jonsson <anders.jonsson@norsjovallen.se>
 1218 
 1219     Update Swedish translation
 1220 
 1221 2021-02-22  Yuri Chornoivan <yurchor@ukr.net>
 1222 
 1223     Update Ukrainian translation
 1224 
 1225 2021-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1226 
 1227     Update SystemRescue name and URL in the GParted Manual
 1228     
 1229     SystemRescue have dropped CD from their name and URL.  Update the
 1230     GParted Manual to reflect this.
 1231 
 1232 2021-02-21  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1233 
 1234     Re-enable PipeCapture read NUL byte unit tests in GitLab CI jobs (#136)
 1235     
 1236     This reverts commit:
 1237         e9223207e6b5224259716f05f84f80ca426acc42.
 1238         Exclude PipeCapture read NUL byte unit tests in GitLab CI jobs (!60)
 1239     now that PipeCapture has been fixed to read NUL characters again.
 1240     
 1241     Closes #136 - 1.2.0: test suite is failing in test_PipeCapture
 1242 
 1243 2021-02-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1244 
 1245     Accept NUL as a valid UTF-8 character again (#136)
 1246     
 1247     On newer distributions the PipeCapture tests have been failing like
 1248     this:
 1249         $ ./test_PipeCapture
 1250         ...
 1251         [ RUN      ] PipeCaptureTest.ReadEmbeddedNULCharacter
 1252         test_PipeCapture.cc:336: Failure
 1253               Expected: inputstr
 1254              Of length: 6
 1255         To be equal to: capturedstr.raw()
 1256              Of length: 5
 1257         With first binary difference:
 1258         < 0x00000000  "ABC.EF"            41 42 43 00 45 46
 1259         --
 1260         > 0x00000000  "ABCEF"             41 42 43 45 46
 1261         [  FAILED  ] PipeCaptureTest.ReadEmbeddedNULCharacter (0 ms)
 1262         [ RUN      ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character
 1263         test_PipeCapture.cc:353: Failure
 1264               Expected: expectedstr
 1265              Of length: 7
 1266         To be equal to: capturedstr.raw()
 1267              Of length: 6
 1268         With first binary difference:
 1269         < 0x00000000  "._45678"           00 5F 34 35 36 37 38
 1270         --
 1271         > 0x00000000  "_45678"            5F 34 35 36 37 38
 1272         [  FAILED  ] PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character (0 ms)
 1273         ...
 1274     
 1275     Found that test_PipeCapture succeeds on Fedora 31 and fails on
 1276     Fedora 32.  Also test_PipeCapture binary from Fedora 31 and 32 both pass
 1277     on Fedora 31 and both fail on Fedora 32.  So something outside of the
 1278     GParted code and tests is the cause.
 1279     
 1280     Confirmed that this GLib change "Add a missing check to
 1281     g_utf8_get_char_validated()" [1], first released in GLib 2.63.0, made
 1282     the difference.  On Fedora 32 with GLib 2.64.6, rebuilt GLib with that
 1283     change reverted and the tests passed.  Anyway fix the wrapper GParted
 1284     has around g_utf8_get_char_validated() to also handle this case of
 1285     reading a NUL character.
 1286     
 1287     [1] https://gitlab.gnome.org/GNOME/glib/-/commit/568720006cd1da3390c239915337ed0a56a23f2e
 1288         Add a missing check to g_utf8_get_char_validated()
 1289     
 1290     Closes #136 - 1.2.0: test suite is failing in test_PipeCapture
 1291 
 1292 2021-02-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1293 
 1294     Refactor ::OnReadable() creating get_utf8_char_validated() (#136)
 1295     
 1296     Extract call to GLib's g_utf8_get_char_validated() and the associated
 1297     workaround to also read NUL characters into a separate function to make
 1298     PipeCapture::OnReadable() a little smaller and simpler, so easier to
 1299     understand.
 1300     
 1301     Add max_len > 0 clause into get_utf8_char_validated() like this:
 1302         if (uc == UTF8_PARTIAL && max_len > 0)
 1303     so that the NUL character reading workaround is only applied when
 1304     max_len specifies the maximum number of bytes to read, rather than
 1305     when -1 specifies reading a NUL termination string.  This makes
 1306     get_utf8_char_validated() a complete wrapper of
 1307     g_utf8_get_char_validated() [1], even though GParted always specifies
 1308     the maximum number of bytes to read.
 1309     
 1310     No longer describe the inability to read NUL characters as a bug [2]
 1311     since the GLib author's said it wasn't [3].
 1312     
 1313     [1] GLib Reference Manual, Unicode Manipulation Functions,
 1314         g_utf8_get_char_validated ()
 1315         https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-get-char-validated
 1316     
 1317     [2] 8dbbb47ce2db0ee733ff909c1ead2f4de9475596
 1318         Workaround g_utf8_get_char_validate() bug with embedded NUL bytes
 1319         (#777973)
 1320     
 1321     [3] Bug 780095 - g_utf8_get_char_validated() stopping at nul byte even
 1322         for length specified buffers
 1323         https://bugzilla.gnome.org/show_bug.cgi?id=780095#18
 1324             "If g_utf8_get_char_validated() encounters a nul byte in the
 1325             middle of a string of given longer length, it returns -2,
 1326             indicating a partial gunichar.  That is not the obvious
 1327             behaviour, but since g_utf8_get_char_validated() has been API
 1328             for a long time, the behaviour cannot be changed.
 1329             "
 1330     
 1331     Closes #136 - 1.2.0: test suite is failing in test_PipeCapture
 1332 
 1333 2021-02-18  Yuri Chornoivan <yurchor@ukr.net>
 1334 
 1335     Add Ukrainian screenshot (!70)
 1336     
 1337     Closes !70 - Add Ukrainian screenshot
 1338 
 1339 2021-02-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1340 
 1341     Rename SupportedFileSystemsTest method to create_image_file()
 1342     
 1343     ... from extra_setup() to provide a more meaningful description of what
 1344     it does.
 1345 
 1346 2021-02-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1347 
 1348     Update allow partition deletion comment in set_valid_operations()
 1349     
 1350     This previous commit [1] suggested that in future partition deletion
 1351     might be allowed even while a LUKS mapping was active in that partition.
 1352     To allow deletion of a partition while it has active content is wrong.
 1353     That is a significant reason GParted has busy detection of otherwise
 1354     unrecognised file systems [2] and recognition and busy detection of, but
 1355     otherwise not controllable support for, Linux Software RAID [3] and
 1356     ATARAID [4][5] arrays.
 1357     
 1358     To automatically close the LUKS partition first would be against the
 1359     pattern of behaviour that GParted has established, of requiring explicit
 1360     deactivation of file systems, swap and volume groups before allowing
 1361     deletion.  Therefore update the comment accordingly.
 1362     
 1363     [1] f1e3d42b5604d93dc954f5f218ef489649f11284
 1364         Prevent deletion of open LUKS mappings (#774818)
 1365     
 1366     [2] 49a2e19462fdbe4b28a53cc21a2ddd29d256ff41
 1367         Restore busy detection of unknown mounted file systems (#723842)
 1368     
 1369     [3] d2e1130ad22eb3f52db4dc7f645ed4d5bf119d24
 1370         Detect busy status of Linux Software RAID members (#709640)
 1371     
 1372     [4] 6e990ea48ad4177fbf1a26b5f6d9dd60b218874d
 1373         Detect busy status of mdadm started ATARAID members (#75)
 1374     
 1375     [5] caec22871e2fa869db85831c625f30d70738906e
 1376         Detect busy status of dmraid started ATARAID members (#75)
 1377 
 1378 2021-02-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1379 
 1380     Add support for updating the exFAT UUID (!67)
 1381     
 1382     Also with exfatprogs 1.1.0 [1], tune.exfat and exfatlabel gained the
 1383     capability to report and set the exFAT Volume Serial Number [2][3][4].
 1384     This is what blkid and therefore GParted reports as the UUID.
 1385     
 1386     Report serial number:
 1387     
 1388         # tune.exfat -i /dev/sdb1
 1389         exfatprogs version : 1.1.0
 1390         volume serial : 0x772ffe5d
 1391         # echo $?
 1392         0
 1393     
 1394         # blkid /dev/sdb1
 1395         /dev/sdb1: LABEL="test exfat" UUID="772F-FE5D" TYPE="exfat" PTTYPE="dos"
 1396     
 1397     Set serial number:
 1398     
 1399         # tune.exfat -I 0xf96ef190 /dev/sdb1
 1400         exfatprogs version : 1.1.0
 1401         New volume serial : 0xf96ef190
 1402         # echo $?
 1403         0
 1404     
 1405     tune.exfat exists in earlier releases of exfatprogs so check it has the
 1406     capability by searching for "Set volume serial" in the help output
 1407     before enabling this capability.
 1408     
 1409         # tune.exfat
 1410         exfatprogs version : 1.1.0
 1411         Usage: tune.exfat
 1412                 -l | --print-label                    Print volume label
 1413                 -L | --set-label=label                Set volume label
 1414                 -i | --print-serial                   Print volume serial
 1415                 -L | --set-serial=value               Set volume serial
 1416                 -V | --version                        Show version
 1417                 -v | --verbose                        Print debug
 1418                 -h | --help                           Show help
 1419     
 1420     (Note the cut and paste error reporting the set volume serial flag as
 1421     '-L' rather than actually '-S').
 1422     
 1423     [1] exfatprogs-1.1.0 version released
 1424         http://github.com/exfaoprogs/exfatprogs/releases/tag/1.1.0
 1425     
 1426     [2] [tools][feature request] Allow To Change Volume Serial Number ("ID")
 1427         #138
 1428         https://github.com/exfatprogs/exfatprogs/issues/138
 1429     
 1430     [3] exfatlabel:add get/set volume serial option
 1431         https://github.com/exfatprogs/exfatprogs/commit/b4d9c9eeb5c28b503e103e2c4ec22bc146446d9f
 1432     
 1433     [4] exFAT file system specification, 3.1.11 VolumeSerialNumber Field
 1434         https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification#3111-volumeserialnumber-field
 1435     
 1436     Closes !67 - Add support for reading exFAT usage and updating the UUID
 1437 
 1438 2021-02-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1439 
 1440     Add exFAT file system usage reporting (!67)
 1441     
 1442     exfatprogs 1.1.0 released 2021-02-09 [1] has gained support for
 1443     reporting file system usage [2][3] so add that capability to GParted.
 1444     It works like this:
 1445     
 1446         # dump.exfat /dev/sdb1 | egrep 'Volume Length\(sectors\):|Sector Size Bits:|Sector per Cluster bits:|Free Clusters:'
 1447         Volume Length(sectors):                 524288
 1448         Sector Size Bits:                       9
 1449         Sector per Cluster bits:                3
 1450         Free Clusters:                          23585
 1451     
 1452     Unfortunately dump.exfat returns a non-zero status on success so that
 1453     can't be used to check for failure:
 1454     
 1455         # dump.exfat /dev/sdb1
 1456         exfatprogs version : 1.1.0
 1457         -------------- Dump Boot sector region --------------
 1458         Volume Length(sectors):                 524288
 1459         ...
 1460         # echo $?
 1461         192
 1462     
 1463     dump.exfat only writes errors to stderr, so use this to identify failure:
 1464     
 1465         # dump.exfat /dev/sdb1 1> /dev/null
 1466         # echo $?
 1467         192
 1468     
 1469         # dump.exfat /dev/zero 1> /dev/null
 1470         invalid block device size(/dev/zero)
 1471         bogus sector size bits : 0
 1472         # echo $?
 1473         234
 1474     
 1475     [1] exfatprogs-1.1.0 version released
 1476         http://github.com/exfaoprogs/exfatprogs/releases/tag/1.1.0
 1477     
 1478     [2] [feature request] File system usage reporting
 1479         https://github.com/exfatprogs/exfatprogs/issues/139
 1480     
 1481     [3] exfatprogs: add dump.exfat
 1482         https://github.com/exfatprogs/exfatprogs/commit/7ce9b2336b06e76521f7e041d8f0712b2d98a15b
 1483     
 1484     Closes !67 - Add support for reading exFAT usage and updating the UUID
 1485 
 1486 2021-02-16  Anders Jonsson <anders.jonsson@norsjovallen.se>
 1487 
 1488     Update Swedish translation
 1489 
 1490 2021-02-16  Yuri Chornoivan <yurchor@ukr.net>
 1491 
 1492     Update Ukrainian translation
 1493 
 1494 2021-02-15  Yuri Chornoivan <yurchor@ukr.net>
 1495 
 1496     Add Ukrainian translation of docs (!69)
 1497     
 1498     Closes !69 - Add Ukrainian translation of docs
 1499 
 1500 2021-02-15  Yuri Chornoivan <yurchor@ukr.net>
 1501 
 1502     Fix minor typos in docs (!68)
 1503     
 1504     Closes !68 - Fix minor typos in docs
 1505 
 1506 2021-02-15  Balázs Úr <balazs@urbalazs.hu>
 1507 
 1508     Update Hungarian translation
 1509 
 1510 2021-02-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1511 
 1512     Avoid detecting exfat-utils commands as exfatprogs commands (#137)
 1513     
 1514     A user had exfat-utils installed and tried to use GParted to create an
 1515     exfat file system.  GParted ran this command but it failed:
 1516         # mkfs.exfat -L '' '/dev/sdb1'
 1517         mkexfatfs 1.3.0
 1518         mkfs.exfat: invalid option -- 'L'
 1519         Usage: mkfs.exfat [-i volume-id] [-n label] [-p partition-first-sector] [-s sectors-per-cluster] [-V] <device>
 1520     
 1521     The problem is that both exfat-utils and exfatprogs packages provide
 1522     mkfs.exfat and fsck.exfat commands but they have incompatible command
 1523     line options and GParted is programmed for exfatprogs.  So far GParted
 1524     just checks the executable exists, hence the mis-identification.
 1525     
 1526     Reported version of exfat-utils commands:
 1527         $ mkfs.exfat -V 2> /dev/null
 1528         mkexfatfs 1.3.0
 1529         Copyright (C) 2011-2018  Andrew Nayenko
 1530         $ fsck.exfat -V 2> /dev/null
 1531         exfatfsck 1.3.0
 1532         Copyright (C) 2011-2018  Andrew Nayenko
 1533     
 1534     Reported versions of exfatprogs commands:
 1535         $ mkfs.exfat -V 2> /dev/null
 1536         exfatprogs version : 1.0.4
 1537         $ fsck.exfat -V 2> /dev/null
 1538         exfatprogs version : 1.0.4
 1539     
 1540     Fix this by only enabling exfat support also when the version string of
 1541     each command starts "exfatprogs version".  Note that this extra checking
 1542     is not needed for tune.exfat because only exfatprogs provides that
 1543     executable.
 1544     
 1545     Closes #137 - Creating exfat partition with a label fails with error
 1546 
 1547 2021-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1548 
 1549     Make gparted shell wrapper report exit status from gpartedbin
 1550     
 1551     gparted shell wrapper always exits with a 0 status even if gpartedbin
 1552     fails.  For example make gpartedbin fail with a non-zero exit status
 1553     like this:
 1554         $ (unset DISPLAY; unset XAUTHORITY; /usr/sbin/gpartedbin)
 1555     
 1556         (gpartedbin:3936): Gtk-WARNING **: 16:36:06.263: cannot open display:
 1557         $ echo $?
 1558         1
 1559     
 1560     However the gparted shell wrapper instead exits with successful status
 1561     0:
 1562         $ (unset DISPLAY; unset XAUTHORITY; gparted)
 1563     
 1564         (gpartedbin:4282): Gtk-WARNING **: 16:39:23.514: cannot open display:
 1565         $ echo $?
 1566         0
 1567     
 1568     Fix this.
 1569 
 1570 2020-01-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1571 
 1572     Replace Win_GParted::hbox member with local variables
 1573     
 1574     hbox is a very generic name for a member variable and used as a local
 1575     variable in two methods.  Change to local variables instead.
 1576 
 1577 2021-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1578 
 1579     Remove now unused return value from run_blkid_load_cache() (#131)
 1580     
 1581     Closes #131 - GParted hangs when non-named device is hung
 1582 
 1583 2021-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1584 
 1585     Remove now superfluous load_fs_info_cache() (#131)
 1586     
 1587     This method is now only called from one location in the code so put it's
 1588     two lines of code there.
 1589     
 1590     Closes #131 - GParted hangs when non-named device is hung
 1591 
 1592 2021-01-31  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1593 
 1594     Ensure FS_Info (blkid) cache is populated before first use (#131)
 1595     
 1596     Now we always want to run blkid naming all paths, ensure the FS_Info
 1597     cache is explicitly loaded first.  Report an error if not done so and
 1598     remove the cache loading code from running blkid without naming all
 1599     paths.  Fewer code paths to consider and reason about.
 1600     
 1601     Closes #131 - GParted hangs when non-named device is hung
 1602 
 1603 2021-01-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1604 
 1605     Remove extra execution of blkid for any unreported paths (#131)
 1606     
 1607     Again on Fedora 31 with a slightly different disk layout to the previous
 1608     commit.  sdb is partitioned with 1 empty partition and sdc remains
 1609     completely empty:
 1610         # lsblk -o name,maj:min,rm,size,ro,type,fstype,label,mountpoint
 1611         NAME            MAJ:MIN RM  SIZE RO TYPE FSTYPE      LABEL MOUNTPOINT
 1612         sda               8:0    0   20G  0 disk
 1613         |-sda1            8:1    0    1G  0 part ext4              /boot
 1614         \-sda2            8:2    0   19G  0 part LVM2_member
 1615           |-fedora-root 253:0    0   17G  0 lvm  ext4              /
 1616           \-fedora-swap 253:1    0    2G  0 lvm  swap              [SWAP]
 1617         sdb               8:16   0    8G  0 disk
 1618         \-sdb1            8:17   0    1G  0 part
 1619         sdc               8:32   0    8G  0 disk
 1620         sr0              11:0    1 1024M  0 rom
 1621         # blkid -v
 1622         blkid from util-linux 2.34  (libblkid 2.34.0, 14-Jun-2019)
 1623         # blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdc
 1624         /dev/sda: PTUUID="5012fb1f" PTTYPE="dos"
 1625         /dev/sda1: UUID="3cd48816-7817-4636-9fec-5f1afe76c1b2" TYPE="ext4" PARTUUID="5012fb1f-01"
 1626         /dev/sda2: UUID="PH94ej-C8xU-bnMJ-UIh8-ZimI-4B7f-dHlZxh" TYPE="LVM2_member" PARTUUID="5012fb1f-02"
 1627         /dev/sdb: PTUUID="1d120b57" PTTYPE="dos"
 1628         /dev/sdb1: PARTUUID="1d120b57-01"
 1629     
 1630     Stracing GParted shows these executions of blkid:
 1631         # strace -f -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | egrep -v 'ENOENT|SIGCHLD'
 1632         ...
 1633         [pid 160040] execve("/usr/sbin/blkid", ["blkid", "/dev/sda", "/dev/sda1", "/dev/sda2", "/dev/sdb", "/dev/sdb1", "/dev/sdc"], 0xa4e1b0 /* 32 vars */ <detached ...>
 1634         [pid 160041] execve("/usr/sbin/blkid", ["blkid", "/dev/sdc"], 0xa4e1b0 /* 32 vars */ <detached ...>
 1635         ...
 1636     
 1637     On Fedora 31 with blkid from util-linux 2.34 it reports information for
 1638     sdb (partitioned drive) and sdb1 (empty partition) with only no
 1639     information for sdc (empty whole disk drive).  Hence no FS_Info cache
 1640     entry and re-execution of blkid just for sdc.
 1641     
 1642     On older CentOS 7 with the same disk layout blkid reports this:
 1643         # blkid -v
 1644         blkid from util-linux 2.23.2  (libblkid 2.23.0, 25-Apr-2013)
 1645         # blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdb1 /dev/sdc
 1646         /dev/sda: PTTYPE="dos"
 1647         /dev/sda1: UUID="e7d559e4-3e1d-4fbc-b034-3fdeb498f44d" TYPE="xfs"
 1648         /dev/sda2: UUID="B7ODFx-BfTE-hq7N-UlrF-f5ML-CPRe-klSy26" TYPE="LVM2_member"
 1649         /dev/sdb: PTTYPE="dos"
 1650     
 1651     And stracing GParted shows these executions of blkid:
 1652         # strace -f -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | egrep -v 'ENOENT|SIGCHLD'
 1653         ...
 1654         [pid  1889] execve("/sbin/blkid", ["blkid", "/dev/sda", "/dev/sda1", "/dev/sda2", "/dev/sdb", "/dev/sdb1", "/dev/sdc"], 0x10b8b10 /* 26 vars */ <detached ...>
 1655         [pid  1890] execve("/sbin/blkid", ["blkid", "/dev/sdb1"], 0x10b8b10 /* 26 vars */ <detached ...>
 1656         [pid  1891] execve("/sbin/blkid", ["blkid", "/dev/sdc"], 0x10b8b10 /* 26 vars */ <detached ...>
 1657     ...
 1658     
 1659     This time on CentOS 7 with blkid from util-linux 2.23.2 it reports
 1660     information for only sdb (partitioned drive), but not sdb1 (empty
 1661     partition) or sdc (empty whole disk drive).  Hence no FS_info cache
 1662     entries and re-execution of blkid for both sdb1 and sdc.
 1663     
 1664     GParted needs blkid identification of file system images, LVM Logical
 1665     Volumes or any other partitions named on the command line which it
 1666     wouldn't normally scan [1].  Now every name of interest is passed to
 1667     blkid, additional executions of blkid won't get any extra information
 1668     and are redundant.  Therefore remove this unnecessary code.
 1669     
 1670     Note that these last 2 commits remove creation of "blank" cache entries
 1671     (just block special with blank fstype and other attributes) when blkid
 1672     reports no information for a particular path.  Those entry were needed
 1673     to suppress unnecessary additional execution of blkid.  However now that
 1674     blkid is only executed once (excluding querying the label) this is no
 1675     longer necessary.  All the getter functions return suitable blank values
 1676     when no cache entry is found.
 1677     
 1678     [1] e8f0504b13d98e23e70021f70638184daab228ec
 1679         Make sure that FS_Info cache is loaded for all named paths (#787181)
 1680     
 1681     Closes #131 - GParted hangs when non-named device is hung
 1682 
 1683 2021-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1684 
 1685     Remove extra execution of blkid for whole disk devices (#131)
 1686     
 1687     On Fedora 31 with this simple disk layout where both sdb and sdc are
 1688     completely empty:
 1689         # lsblk -o name,maj:min,rm,size,ro,type,fstype,label,mountpoint
 1690         NAME            MAJ:MIN RM  SIZE RO TYPE FSTYPE      LABEL MOUNTPOINT
 1691         sda               8:0    0   20G  0 disk
 1692         |-sda1            8:1    0    1G  0 part ext4              /boot
 1693         \-sda2            8:2    0   19G  0 part LVM2_member
 1694           |-fedora-root 253:0    0   17G  0 lvm  ext4              /
 1695           \-fedora-swap 253:1    0    2G  0 lvm  swap              [SWAP]
 1696         sdb               8:16   0    8G  0 disk
 1697         sdc               8:32   0    8G  0 disk
 1698         sr0              11:0    1 1024M  0 rom
 1699         # blkid /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
 1700         /dev/sda: PTUUID="5012fb1f" PTTYPE="dos"
 1701         /dev/sda1: UUID="3cd48816-7817-4636-9fec-5f1afe76c1b2" TYPE="ext4" PARTUUID="5012fb1f-01"
 1702         /dev/sda2: UUID="PH94ej-C8xU-bnMJ-UIh8-ZimI-4B7f-dHlZxh" TYPE="LVM2_member" PARTUUID="5012fb1f-02"
 1703     
 1704     Stracing GParted shows extra executions of blkid:
 1705         # strace -f -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | egrep -v 'ENOENT|SIGCHLD'
 1706         ...
 1707         [pid  7659] execve("/usr/sbin/blkid", ["blkid", "/dev/sda", "/dev/sda1", "/dev/sda2", "/dev/sdb", "/dev/sdc"], 0x1d300f0 /* 32 vars */ <detached ...>
 1708         [pid  7660] execve("/usr/sbin/blkid", ["blkid", "/dev/sdb"], 0x1d300f0 /* 32 vars */ <detached ...>
 1709         [pid  7661] execve("/usr/sbin/blkid", ["blkid", "/dev/sdc"], 0x1d300f0 /* 32 vars */ <detached ...>
 1710         ...
 1711     
 1712     blkid is only run again for sdb and sdc, not sda, because blkid didn't
 1713     report anything for them from the first execution.  GParted needs blkid
 1714     identification of whole disk devices to ensure that ISO9660 images on
 1715     whole disk devices are correctly identified [1].  Now the first run of
 1716     blkid passes all the device names, so this additional execution of blkid
 1717     won't get any extra information and is redundant.  Therefore remove this
 1718     unnecessary code.
 1719     
 1720     [1] b2190372d04f09bd38a7395b38e43034f1733d81
 1721         Ensure blkid FS_Info cache has entries for all whole disk devices
 1722         (#771244)
 1723     
 1724     Closes #131 - GParted hangs when non-named device is hung
 1725 
 1726 2021-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1727 
 1728     Pass device and partition names to blkid (#131)
 1729     
 1730     A user reported that GParted would hang at "scanning all devices...",
 1731     when a fully working disk was named on the command line, but another
 1732     device on the machine was hung.
 1733     
 1734     This can be replicated like this:
 1735     (on Ubuntu 20.04 LTS for it's NBD support)
 1736     
 1737     1. Export and import NBD:
 1738         # truncate -s 1G /tmp/disk-1G.img
 1739         # nbd-server -C /dev/null 9000 /tmp/disk-1G.img
 1740         # nbd-client localhost 9000 /dev/nbd0
 1741     
 1742     2. Hang the NBD server and therefore /dev/nbd0:
 1743         # killall -STOP nbd-server
 1744     
 1745     3. Run GParted:
 1746         $ gparted /dev/sda
 1747     
 1748     Tracing GParted shows that execution of blkid never returns.
 1749     
 1750         # strace -f -tt -q -bexecve -eexecve ./gpartedbin 2>&1 1> /dev/null | fgrep -v ENOENT
 1751         ...
 1752         [pid 37823] 13:56:24.814139 execve("/usr/sbin/mkudffs", ["mkudffs", "--help"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
 1753         [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} ---
 1754         [pid 37825] 13:56:25.376796 execve("/usr/sbin/blkid", ["blkid", "-v"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
 1755         [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} ---
 1756         [pid 37826] 13:56:25.402512 execve("/usr/sbin/blkid", ["blkid"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
 1757     
 1758     Tracking of blkid shows that it hangs on either the open of or first
 1759     read from /dev/nbd0.
 1760     
 1761         # strace blkid
 1762         ...
 1763         lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
 1764         lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1765         stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1766         lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
 1767         lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1768         access("/dev/nbd0", F_OK)               = 0
 1769         stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1770         openat(AT_FDCWD, "/sys/dev/block/43:0", O_RDONLY|O_CLOEXEC) = 4
 1771         openat(4, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 1772         close(4)                                = 0
 1773         openat(AT_FDCWD, "/dev/nbd0", O_RDONLY|O_CLOEXEC
 1774     
 1775     Clean up:
 1776     
 1777     1. Resume NBD server:
 1778         # killall -CONT nbd-server
 1779     
 1780     2. Delete NBD setup:
 1781         # nbd-client -d /dev/nbd0
 1782         # killall nbd-server
 1783         # rm /tmp/disk-1G.img
 1784     
 1785     Fix this by making GParted specify the whole disk device and partition
 1786     names that it is interested in to blkid, rather than letting blkid scan
 1787     and report all block devices.  Do this both when GParted determines the
 1788     devices for itself and when they are named on the command line.
 1789     
 1790     Also update example blkid command output being parsed and cache value
 1791     with this change to how blkid is executed.
 1792     
 1793     Closes #131 - GParted hangs when non-named device is hung
 1794 
 1795 2021-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1796 
 1797     Refactor run_blkid_load_cache() into if fail return early (#131)
 1798     
 1799     ... code pattern.  Simplifies the code a little.
 1800     
 1801     Closes #131 - GParted hangs when non-named device is hung
 1802 
 1803 2021-01-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1804 
 1805     Read partition names from /proc/partitions too (#131)
 1806     
 1807     GParted already always reads /proc/partitions for whole disk device
 1808     names no matter whether it uses whole disk devices named on the command
 1809     line, from /proc/partitions or from libparted.  As /proc/partitions
 1810     lists all the block devices that the kernel knows about, and therefore
 1811     all the possible ones blkid could probe, so use it to provide partition
 1812     names and device to partition mapping.  See code comments for more
 1813     details about the assumptions the /proc/partition parsing code makes and
 1814     the fact that these are confirmed by examining the Linux kernel source.
 1815     
 1816     This commit just adds debugging to print the existing vector of
 1817     validated devices GParted shows in the UI and the vector with all
 1818     partitions added, ready for but not yet passed to blkid.
 1819         # ./gpartedbin
 1820         ...
 1821         DEBUG: device_paths=["/dev/sda","/dev/sdb"]
 1822         DEBUG: device_and_partition_paths=["/dev/sda","/dev/sda1","/dev/sda2","/dev/sdb","/dev/sdb1"]
 1823     
 1824     Also demonstrating that this continues to support named devices,
 1825     including file system image files [1].
 1826         # truncate -s 256M /tmp/ext4.img
 1827         # mkfs.ext4 /tmp/ext4.img
 1828         # ./gpartedbin /dev/sda /tmp/ext4.img
 1829         ...
 1830         DEBUG: device_paths=["/dev/sda","/tmp/ext4.img"]
 1831         DEBUG: device_and_partition_paths=["/dev/sda","/dev/sda1","/dev/sda2","/tmp/ext4.img"]
 1832     
 1833     [1] e8f0504b13d98e23e70021f70638184daab228ec
 1834         Make sure that FS_Info cache is loaded for all named paths (#787181)
 1835     
 1836     Closes #131 - GParted hangs when non-named device is hung
 1837 
 1838 2021-01-21  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1839 
 1840     Refactor load_proc_partitions_info_cache() a bit (#131)
 1841     
 1842     Put whole disk device name matching code into a helper function to make
 1843     the /proc/partition parsing code easier to understand.
 1844     
 1845     Closes #131 - GParted hangs when non-named device is hung
 1846 
 1847 2021-01-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1848 
 1849     Merge FS_Info load cache calls (#131)
 1850     
 1851     Now FS_Info::load_cache() and ::load_cache_for_paths() are nearly next
 1852     to each other, merge them together to simplify the code a little.  This
 1853     makes the special case to ensure that file system images named on the
 1854     command line were queried by blkid and loaded into the FS_Info cache [1]
 1855     become the normal cache loading method.  Already passing all discovered
 1856     or named devices to load_cache_for_paths() is also a step on the way to
 1857     doing it for all devices and partitions of interest.
 1858     
 1859     Just need to ensure that load_cache_for_paths() always loads the cache
 1860     as load_cache() did, rather than only when it hadn't already been
 1861     loaded.  Otherwise GParted will only ever run blkid and load the cache
 1862     once at startup and not on each refresh.
 1863     
 1864     [1] e8f0504b13d98e23e70021f70638184daab228ec
 1865         Make sure that FS_Info cache is loaded for all named paths (#787181)
 1866     
 1867     Closes #131 - GParted hangs when non-named device is hung
 1868 
 1869 2021-01-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 1870 
 1871     Initialise partition content discovery caches a bit later (#131)
 1872     
 1873     PATCHSET OVERVIEW
 1874     
 1875     A user reported that GParted would hang at "scanning all devices...",
 1876     when a fully working disk was named on the command line, but another
 1877     device on the machine was hung.
 1878     
 1879     This can be replicated like this:
 1880     (on Ubuntu 20.04 LTS for it's NBD support)
 1881     
 1882     1. Export and import NBD:
 1883         # truncate -s 1G /tmp/disk-1G.img
 1884         # nbd-server -C /dev/null 9000 /tmp/disk-1G.img
 1885         # nbd-client localhost 9000 /dev/nbd0
 1886     
 1887     2. Hang the NBD server and therefore /dev/nbd0:
 1888         # killall -STOP nbd-server
 1889     
 1890     3. Run GParted:
 1891         $ gparted /dev/sda
 1892     
 1893     Tracing GParted shows that execution of blkid never returns.
 1894     
 1895         # strace -f -tt -q -bexecve -eexecve /usr/sbin/gpartedbin 2>&1 1> /dev/null | fgrep -v ENOENT
 1896         ...
 1897         [pid 37823] 13:56:24.814139 execve("/usr/sbin/mkudffs", ["mkudffs", "--help"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
 1898         [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} ---
 1899         [pid 37825] 13:56:25.376796 execve("/usr/sbin/blkid", ["blkid", "-v"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
 1900         [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} ---
 1901         [pid 37826] 13:56:25.402512 execve("/usr/sbin/blkid", ["blkid"], 0x55e2a3f2d230 /* 20 vars */ <detached ...>
 1902     
 1903     Tracing of blkid shows that it hangs on either the open of or first
 1904     read from /dev/nbd0.
 1905     
 1906         # strace blkid
 1907         ...
 1908         lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
 1909         lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1910         stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1911         lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4560, ...}) = 0
 1912         lstat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1913         access("/dev/nbd0", F_OK)               = 0
 1914         stat("/dev/nbd0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x2b, 0), ...}) = 0
 1915         openat(AT_FDCWD, "/sys/dev/block/43:0", O_RDONLY|O_CLOEXEC) = 4
 1916         openat(4, "dm/uuid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
 1917         close(4)                                = 0
 1918         openat(AT_FDCWD, "/dev/nbd0", O_RDONLY|O_CLOEXEC
 1919     
 1920     Clean up:
 1921     
 1922     1. Resume NBD server:
 1923         # killall -CONT nbd-server
 1924     
 1925     2. Delete NBD setup:
 1926         # nbd-client -d /dev/nbd0
 1927         # killall nbd-server
 1928         # rm /tmp/disk-1G.img
 1929     
 1930     Going to fix this by making GParted specify the device and partition
 1931     names that it is interested in to blkid, rather than letting blkid scan
 1932     and report all block devices.  Do this both when GParted determines the
 1933     devices for itself and when they are named on the command line.
 1934     
 1935     THIS PATCH
 1936     
 1937     Move the loading and initialising of caches used during content
 1938     discovery to after device and partition discovery and just before
 1939     content discovery.  Just makes the code ready for the next change.
 1940     
 1941     Closes #131 - GParted hangs when non-named device is hung
 1942 
 1943 2021-02-06  Dušan Kazik <prescott66@gmail.com>
 1944 
 1945     Update Slovak translation
 1946 
 1947 2021-01-25  Curtis Gedak <gedakc@gmail.com>
 1948 
 1949     Append -git to version for continuing development
 1950 
 1951 2021-01-25  Curtis Gedak <gedakc@gmail.com>
 1952 
 1953     ==========   gparted-1.2.0   ==========
 1954 
 1955 2021-01-25  Curtis Gedak <gedakc@gmail.com>
 1956 
 1957     Update copyright years
 1958 
 1959 2021-01-24  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>
 1960 
 1961     Update Latvian translation
 1962 
 1963 2021-01-23  Fabio Tomat <f.t.public@gmail.com>
 1964 
 1965     Update Friulian translation
 1966 
 1967 2021-01-22  Philipp Kiemle <philipp.kiemle@gmail.com>
 1968 
 1969     Update German translation
 1970 
 1971 2021-01-21  Marek Černocký <marek@manet.cz>
 1972 
 1973     Updated Czech translation
 1974 
 1975 2021-01-20  Thibault Martin <mail@thibaultmart.in>
 1976 
 1977     Update French translation
 1978 
 1979 2021-01-19  Мирослав Николић <miroslavnikolic@rocketmail.com>
 1980 
 1981     Update Serbian translation
 1982 
 1983 2021-01-19  Daniel Mustieles <daniel.mustieles@gmail.com>
 1984 
 1985     Updated Spanish translation
 1986 
 1987 2021-01-18  Rafael Fontenelle <rafaelff@gnome.org>
 1988 
 1989     Update Brazilian Portuguese translation
 1990 
 1991 2021-01-18  Rafael Fontenelle <rafaelff@gnome.org>
 1992 
 1993     Update Brazilian Portuguese translation
 1994 
 1995 2021-01-18  Daniel Șerbănescu <daniel@serbanescu.dk>
 1996 
 1997     Update Romanian translation
 1998 
 1999 2021-01-17  Piotr Drąg <piotrdrag@gmail.com>
 2000 
 2001     Update Polish translation
 2002 
 2003 2021-01-16  Anders Jonsson <anders.jonsson@norsjovallen.se>
 2004 
 2005     Update Swedish translation
 2006 
 2007 2021-01-16  Yuri Chornoivan <yurchor@ukr.net>
 2008 
 2009     Update Ukrainian translation
 2010 
 2011 2021-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2012 
 2013     White space tidy-up of Utils::get_filesystem_software()
 2014     
 2015     Put colon directly after case value and list cases in enumeration order.
 2016 
 2017 2021-01-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2018 
 2019     Add unit testing of GParted exFAT interface (!30)
 2020     
 2021     Install exfatprogs into the CentOS 7 GitLab CI image, enabling unit
 2022     testing of GParted's use of exFAT programs.  Exfatprogs is not yet
 2023     available for Ubuntu 20.04 as used in the Ubuntu GitLab CI image, only
 2024     for Ubuntu 20.10 so far.
 2025     
 2026     Closes !30 - Add exFAT support
 2027 
 2028 2021-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2029 
 2030     Set the partition type for exFAT correctly (!30)
 2031     
 2032     Libparted only allows selection of the partition type indirectly by
 2033     specifying the type of the file system it will contain [1] and so far
 2034     doesn't know about the exFAT file system.  Therefore when GParted is
 2035     creating a new exFAT partition, it gets the GParted default of 83
 2036     (Linux file system) on MBR partition tables.
 2037     
 2038     Example operation details:
 2039         Create Primary Partition #1 (exfat, 512.00 MiB) on /dev/sdb
 2040         * create empty partition
 2041         * clear old file system signatures in /dev/sdb1
 2042         * set partition type on /dev/sdb1
 2043             new partition type: ext2
 2044         * create new exfat file system
 2045     
 2046     fdisk report:
 2047         # fdisk -l /dev/sdb
 2048         Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 sectors
 2049         Disk model: VBOX HARDDISK
 2050         Units: sectors of 1 * 512 = 512 bytes
 2051         Sector size (logical/physical): 512 bytes / 512 bytes
 2052         I/O size (minimum/optimal): 512 bytes / 512 bytes
 2053         Disklabel type: dos
 2054         Disk identifier: 0xa2aab629
 2055     
 2056         Device     Boot Start     End Sectors  Size Id Type
 2057         /dev/sdb1        2048 1050623 1048576  512M 83 Linux
 2058     
 2059     However the "exFAT file system specification" says:
 2060         https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification
 2061         "10.2 Partition Tables
 2062     
 2063         To ensure interoperability of exFAT volumes in a broad set of usage
 2064         scenarios, implementations should use partition type 07h for MBR
 2065         partitioned storage and partition GUID
 2066         {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} for GPT partitioned storage.
 2067         "
 2068     
 2069     Fix this.
 2070     
 2071     [1] ped_partition_new(..., const PedFileSystemType* fs_type, ...)
 2072         https://www.gnu.org/software/parted/api/group__PedPartition.html#g2f94ca75880f9e0c3ce57f7a4b72faf5
 2073         ped_partition_set_system(..., const PedFileSystemType* fs_type)
 2074         https://www.gnu.org/software/parted/api/group__PedPartition.html#g2f94ca75880f9e0c3ce57f7a4b72faf5
 2075     
 2076     Closes !30 - Add exFAT support
 2077 
 2078 2021-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2079 
 2080     Add exFAT support (!30)
 2081     
 2082     With exfatprogs (https://github.com/exfatprogs/exfatprogs) installed the
 2083     following operations on exFAT file systems are supported:
 2084     - Creation
 2085     - Checking
 2086     - Labelling
 2087     As of the current exfatprogs 1.0.4 the following are not supported:
 2088     - Reading usage
 2089     - Resizing
 2090     - Updating the UUID
 2091     
 2092     Closes !30 - Add exFAT support
 2093 
 2094 2021-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2095 
 2096     Exclude snap /dev/loop file system image mounts (#129)
 2097     
 2098     On Ubuntu the gparted shell wrapper still attempts to mask lots of
 2099     non-block device based file systems.  Remove the --quiet option from the
 2100     systemctl --runtime mask command to see:
 2101         $ gparted
 2102         Created symlink /run/systemd/system/snap-gnome\x2d3\x2d34\x2d1804-66.mount -> /dev/null.
 2103         Created symlink /run/systemd/system/snap-core-10583.mount -> /dev/null.
 2104         Created symlink /run/systemd/system/boot-efi.mount -> /dev/null.
 2105         Created symlink /run/systemd/system/snap-gtk\x2dcommon\x2dthemes-1514.mount -> /dev/null.
 2106         Created symlink /run/systemd/system/snap-core-10577.mount -> /dev/null.
 2107         Created symlink /run/systemd/system/snap-core18-1944.mount -> /dev/null.
 2108         Created symlink /run/systemd/system/run-user-1000-doc.mount -> /dev/null.
 2109         Created symlink /run/systemd/system/snap-gtk\x2dcommon\x2dthemes-1506.mount -> /dev/null.
 2110         Created symlink /run/systemd/system/snap-gnome\x2d3\x2d28\x2d1804-128.mount -> /dev/null.
 2111         Created symlink /run/systemd/system/snap-snap\x2dstore-518.mount -> /dev/null.
 2112         Created symlink /run/systemd/system/snap-gnome\x2d3\x2d28\x2d1804-145.mount -> /dev/null.
 2113         Created symlink /run/systemd/system/snap-core18-1932.mount -> /dev/null.
 2114         Created symlink /run/systemd/system/snap-snap\x2dstore-467.mount -> /dev/null.
 2115         Created symlink /run/systemd/system/snap-gnome\x2d3\x2d34\x2d1804-60.mount -> /dev/null.
 2116         Created symlink /run/systemd/system/-.mount -> /dev/null.
 2117         GParted 1.0.0
 2118         configuration --enable-libparted-dmraid --enable-online-resize
 2119         libparted 3.3
 2120     
 2121     The gparted shell wrapper is currently looking for non-masked Systemd
 2122     mount units where the 'What' property starts "/dev/".  However Ubuntu
 2123     also uses snap packages which are mounted file images via loop devices:
 2124         $ grep '^/dev/' /proc/mounts | sort
 2125         /dev/fuse /run/user/1000/doc fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
 2126         /dev/loop0 /snap/core/10583 squashfs ro,nodev,relatime 0 0
 2127         /dev/loop10 /snap/snap-store/518 squashfs ro,nodev,relatime 0 0
 2128         /dev/loop11 /snap/snap-store/467 squashfs ro,nodev,relatime 0 0
 2129         /dev/loop12 /snap/gtk-common-themes/1506 squashfs ro,nodev,relatime 0 0
 2130         /dev/loop1 /snap/core/10577 squashfs ro,nodev,relatime 0 0
 2131         /dev/loop3 /snap/core18/1944 squashfs ro,nodev,relatime 0 0
 2132         /dev/loop4 /snap/core18/1932 squashfs ro,nodev,relatime 0 0
 2133         /dev/loop5 /snap/gnome-3-34-1804/66 squashfs ro,nodev,relatime 0 0
 2134         /dev/loop6 /snap/gnome-3-28-1804/128 squashfs ro,nodev,relatime 0 0
 2135         /dev/loop7 /snap/gnome-3-34-1804/60 squashfs ro,nodev,relatime 0 0
 2136         /dev/loop8 /snap/gnome-3-28-1804/145 squashfs ro,nodev,relatime 0 0
 2137         /dev/loop9 /snap/gtk-common-themes/1514 squashfs ro,nodev,relatime 0 0
 2138         /dev/sda1 /boot/efi vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
 2139         /dev/sda5 / ext4 rw,relatime,errors=remount-ro 0 0
 2140     
 2141     Fix by excluding:
 2142     1. Device name "/dev/fuse" because it's a character not a block device
 2143        and the mount point is associated with snap,
 2144     2. Device names starting "/dev/loop" and where the mount point starts
 2145        "/snap/" [1].  This is to allow for use of GParted with explicitly
 2146        named loop devices.
 2147     
 2148     [1] The system /snap directory
 2149         https://snapcraft.io/docs/system-snap-directory
 2150     
 2151     Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
 2152                   anyway
 2153 
 2154 2021-01-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2155 
 2156     Only mask Systemd mounts on block devices (#129)
 2157     
 2158     The gparted shell wrapper masks Systemd mount units to prevent it
 2159     automounting file systems while GParted is running [1], excluding
 2160     virtual file system which GParted isn't interested in [2].  The problem
 2161     is that there are a lot of virtual file systems and they have changed
 2162     between Fedora 19 and 33 so now the exclusion list is out of date.
 2163     
 2164     Run GParted on Fedora 33 and query the mount units while it is running:
 2165         $ systemctl list-units -t mount --full --all
 2166           UNIT                          LOAD   ACTIVE   SUB     DESCRIPTION
 2167           -.mount                       loaded active   mounted Root Mount
 2168         * boot.mount                    masked active   mounted /boot
 2169           dev-hugepages.mount           loaded active   mounted Huge Pages File System
 2170           dev-mqueue.mount              loaded active   mounted POSIX Message Queue File System
 2171         * home.mount                    masked active   mounted /home
 2172         * proc-fs-nfsd.mount            masked inactive dead    proc-fs-nfsd.mount
 2173           proc-sys-fs-binfmt_misc.mount loaded inactive dead    Arbitrary Executable File Formats File System
 2174           run-user-1000-gvfs.mount      loaded active   mounted /run/user/1000/gvfs
 2175         * run-user-1000.mount           masked active   mounted /run/user/1000
 2176         * run-user-42.mount             masked active   mounted /run/user/42
 2177           sys-fs-fuse-connections.mount loaded active   mounted FUSE Control File System
 2178           sys-kernel-config.mount       loaded active   mounted Kernel Configuration File System
 2179           sys-kernel-debug.mount        loaded active   mounted Kernel Debug File System
 2180         * sys-kernel-tracing.mount      masked active   mounted /sys/kernel/tracing
 2181         * sysroot.mount                 masked inactive dead    sysroot.mount
 2182         * tmp.mount                     masked active   mounted /tmp
 2183         * var-lib-machines.mount        masked inactive dead    var-lib-machines.mount
 2184         * var-lib-nfs-rpc_pipefs.mount  masked active   mounted /var/lib/nfs/rpc_pipefs
 2185         * var.mount                     masked inactive dead    var.mount
 2186     
 2187         LOAD   = Reflects whether the unit definition was properly loaded.
 2188         ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
 2189         SUB    = The low-level unit activation state, values depend on unit type.
 2190     
 2191         19 loaded units listed.
 2192         To show all installed unit files use 'systemctl list-unit-files'.
 2193     
 2194     So it masked these virtual file systems which didn't need to be masked:
 2195         * proc-fs-nfsd.mount            masked inactive dead    proc-fs-nfsd.mount
 2196         * run-user-1000.mount           masked active   mounted /run/user/1000
 2197         * run-user-42.mount             masked active   mounted /run/user/42
 2198         * sys-kernel-tracing.mount      masked active   mounted /sys/kernel/tracing
 2199         * var-lib-machines.mount        masked inactive dead    var-lib-machines.mount
 2200         * var-lib-nfs-rpc_pipefs.mount  masked active   mounted /var/lib/nfs/rpc_pipefs
 2201     
 2202     Lines from /proc/partitions for some of these virtual file systems:
 2203         $  egrep '/run/user|/sys/kernel/tracing|/var/lib/nfs/rpc_pipefs' /proc/mounts
 2204         tmpfs /run/user/42 tmpfs rw,seclabel,nosuid,nodev,relatime,size=202656k,nr_inodes=50664,mode=700,uid=42,gid=42,inode64 0 0
 2205         tmpfs /run/user/1000 tmpfs rw,seclabel,nosuid,nodev,relatime,size=202656k,nr_inodes=50664,mode=700,uid=1000,gid=1000,inode64 0 0
 2206         none /sys/kernel/tracing tracefs rw,seclabel,relatime 0 0
 2207         sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
 2208         gvfsd-fuse /run/user/1000/gvfs fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
 2209     
 2210     And for contrast the lines from /proc/mounts for disk backed file systems:
 2211         $ egrep '^/dev/' /proc/mounts
 2212         /dev/sda1 /boot ext4 rw,seclabel,relatime 0 0
 2213         /dev/sda2 / btrfs rw,seclabel,relatime,space_cache,subvolid=258,subvol=/root 0 0
 2214         /dev/sda2 /home btrfs rw,seclabel,relatime,space_cache,subvolid=256,subvol=/home 0 0
 2215     
 2216     Going back to first principles GParted cares that Systemd doesn't
 2217     automount file systems on block devices.  So instead only mask mount
 2218     units which are on block devices.  Where the 'What' property starts
 2219     "/dev/".
 2220     
 2221     Systemd maintains hundreds of properties for each unit.
 2222         $ systemctl show boot.mount | wc -l
 2223         221
 2224     
 2225     The properties of interest for all mount units can be queries like this:
 2226         $ systemctl show --all --property=What,Id,LoadState '*.mount'
 2227         ...
 2228     
 2229         What=sunrpc
 2230         Id=var-lib-nfs-rpc_pipefs.mount
 2231         LoadState=masked
 2232     
 2233         What=/dev/sda1
 2234         Id=boot.mount
 2235         LoadState=masked
 2236     
 2237         ...
 2238     
 2239     [1] 4c109df9b59e55699bd42023cf4007ee359793e9
 2240         Use systemctl runtime mask to prevent automounting (#701676)
 2241     
 2242     [2] 43de8e326a9f6f099e5274619f16039bdc20c1a4
 2243         Do not mask virtual file systems when using systemctl (#708378)
 2244     
 2245     Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
 2246                   anyway
 2247 
 2248 2021-01-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2249 
 2250     Don't try to mask non-existent Systemd \xe2\x97\x8f.service (#129)
 2251     
 2252     With Systemd 246 on Fedora 33, running GParted reports this error and no
 2253     longer masks the system mount units:
 2254     
 2255         $ gparted
 2256         Unit \xe2\x97\x8f.service does not exist, proceeding anyway.
 2257         Unit \xe2\x97\x8f.service does not exist, proceeding anyway.
 2258         GParted 1.1.0
 2259         configuration --enable-libparted-dmraid --enable-online-resize
 2260         libparted 3.3
 2261     
 2262         $ systemctl list-units -t mount --full --all --no-legend
 2263           -.mount                       loaded    active   mounted Root Mount
 2264           boot.mount                    loaded    active   mounted /boot
 2265           dev-hugepages.mount           loaded    active   mounted Huge Pages File System
 2266           dev-mqueue.mount              loaded    active   mounted POSIX Message Queue File System
 2267           home.mount                    loaded    active   mounted /home
 2268           proc-fs-nfsd.mount            loaded    inactive dead    NFSD configuration filesystem
 2269           proc-sys-fs-binfmt_misc.mount loaded    inactive dead    Arbitrary Executable File Formats File System
 2270           run-user-1000-gvfs.mount      loaded    active   mounted /run/user/1000/gvfs
 2271           run-user-1000.mount           loaded    active   mounted /run/user/1000
 2272           run-user-42.mount             loaded    active   mounted /run/user/42
 2273           sys-fs-fuse-connections.mount loaded    active   mounted FUSE Control File System
 2274           sys-kernel-config.mount       loaded    active   mounted Kernel Configuration File System
 2275           sys-kernel-debug.mount        loaded    active   mounted Kernel Debug File System
 2276           sys-kernel-tracing.mount      loaded    active   mounted Kernel Trace File System
 2277         * sysroot.mount                 not-found inactive dead    sysroot.mount
 2278           tmp.mount                     loaded    active   mounted Temporary Directory (/tmp)
 2279           var-lib-machines.mount        loaded    inactive dead    Virtual Machine and Container Storage (Compatibility)
 2280           var-lib-nfs-rpc_pipefs.mount  loaded    active   mounted RPC Pipe File System
 2281         * var.mount                     not-found inactive dead    var.mount
 2282     
 2283         ^
 2284        [Unicode Black Circle character (U+25CF) replaced with star to avoid
 2285        making this this commit message Unicode.]
 2286     
 2287     Currently the gparted shell wrapper lists the Systemd mount units and
 2288     takes the first space separated column as the unit name.  If the LOAD
 2289     status of the unit is not "loaded" then Systemd prefixes the name with
 2290     an optional Black Circle.  Prior to Systemd 246 these extra 2 characters
 2291     at the start of the line, including the optional Black Circle, were
 2292     suppressed by the --no-legend option, but with Systemd 246 this no
 2293     longer happens.  As the mount unit names no longer start in the first
 2294     character of the line no units are masked.  Instead the Unicode Black
 2295     Circle character, UTF-8 byte sequence E2 97 8F, is found at the start of
 2296     highlighted lines which results in this error:
 2297         Unit \xe2\x97\x8f.service does not exist, proceeding anyway.
 2298     
 2299     Fix by adding the --plain option to suppress the optional Black Circle
 2300     in the systemctl output.  Confirmed this option is available in the
 2301     oldest supported distributions with Systemd.
 2302         RedHat / CentOS 7   Systemd 219   systemctl has --plain option.
 2303         Ubuntu 16.04 LTS    Systemd 229   systemctl has --plain option.
 2304     
 2305     Closes #129 - Unit \xe2\x97\x8f.service does not exist, proceeding
 2306                   anyway
 2307 
 2308 2021-01-10  Jordi Mas <jmas@softcatala.org>
 2309 
 2310     Update Catalan translation
 2311 
 2312 2021-01-01  Jordi Mas <jmas@softcatala.org>
 2313 
 2314     Update Catalan translation
 2315 
 2316 2020-11-28  Аляксей <alexey_razumov@tutanota.com>
 2317 
 2318     Update Belarusian translation
 2319 
 2320 2020-11-13  Curtis Gedak <gedakc@gmail.com>
 2321 
 2322     Set default partition alignment to cylinder for amiga partition table (#116)
 2323     
 2324     Closes #116 - Fails to create partitions on disks with Amiga partition
 2325                   tables using default settings
 2326 
 2327 2020-11-02  Jordi Mas <jmas@softcatala.org>
 2328 
 2329     Update Catalan translation
 2330 
 2331 2020-10-13  Dušan Kazik <prescott66@gmail.com>
 2332 
 2333     Update Slovak translation
 2334 
 2335 2019-12-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2336 
 2337     Remove unneeded #include <vector> from TreeView_Detail.h
 2338     
 2339     std::vector<> is no longer used in TreeView_Detail.h since this commit
 2340     replaced them:
 2341         fae909897e92b55aed0624ec8ccf221806e23ef4
 2342         Use PartitionVector class throughout the code (#759726)
 2343 
 2344 2020-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2345 
 2346     Fix CentOS 7 CI test job failures from empty /etc/machine-id (!62)
 2347     
 2348     Since August 2020, GitLab Continuous Integration test jobs have been
 2349     failing on the CentOS 7 image like this from
 2350     tests/test_SupportedFileSystems.log:
 2351     
 2352         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
 2353         See the manual page for dbus-uuidgen to correct this issue.
 2354           D-Bus not built with -rdynamic so unable to print a backtrace
 2355         Running main() from test_SupportedFileSystems.cc
 2356         DISPLAY=":99"
 2357         /usr/bin/xvfb-run: line 181:  6319 Aborted                 (core dumped) DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1
 2358     
 2359     Not sure why this has just started failing in the CentOS 7 CI image now,
 2360     but the error is widely known [1][2][3][4].  Use
 2361     systemd-machine-id-setup to generate a machine ID [5][6]; rather than
 2362     dbus-uuidgen [7] as it's designed to integrate into VMs and does the
 2363     right thing if a valid machine ID already exists.
 2364     
 2365     [1] Red Hat Bug 598200 - D-Bus library appears to be incorrectly set up;
 2366         failed to read machine uuid: UUID file '/var/lib/dbus/machine-id'
 2367         https://bugzilla.redhat.com/show_bug.cgi?id=598200
 2368     [2] Free Desktop Bug 13194 - When machine-id not found, dbus should not
 2369         abort
 2370         https://bugs.freedesktop.org/show_bug.cgi?id=13194
 2371     [3] D-Bus library appears to be incorrectly set up
 2372         https://unix.stackexchange.com/questions/117741/d-bus-library-appears-to-be-incorrectly-set-up
 2373     [4] Generate uuid for container
 2374         https://xpra.org/trac/wiki/Usage/Docker/CentOS
 2375     [5] CentOS / RHEL 7 : How to Change the machine-id
 2376         https://www.thegeekdiary.com/centos-rhel-7-how-to-change-the-machine-id/
 2377     [6] man systemd-machine-id-setup
 2378         https://man7.org/linux/man-pages/man1/systemd-machine-id-setup.1.html
 2379     [7] man dbus-uuidgen
 2380         https://dbus.freedesktop.org/doc/dbus-uuidgen.1.html
 2381     
 2382     Closes !62 - Fix CentOS 7 CI test job failures because of zero sized
 2383                  /etc/machine-id
 2384 
 2385 2020-09-11  Fabio Tomat <f.t.public@gmail.com>
 2386 
 2387     Update Friulian translation
 2388 
 2389 2020-09-06  Aurimas Černius <aurisc4@gmail.com>
 2390 
 2391     Updated Lithuanian translation
 2392 
 2393 2020-08-30  Boyuan Yang <073plan@gmail.com>
 2394 
 2395     Update Chinese (China) translation
 2396 
 2397 2020-07-12  Piotr Drąg <piotrdrag@gmail.com>
 2398 
 2399     Update Polish translation
 2400     
 2401     Fixes https://gitlab.gnome.org/Teams/Translation/pl/-/issues/8
 2402 
 2403 2020-06-26  Baurzhan Muftakhidinov <baurthefirst@gmail.com>
 2404 
 2405     Update Kazakh translation
 2406 
 2407 2020-05-31  Daniel Șerbănescu <daniel@serbanescu.dk>
 2408 
 2409     Update Romanian translation
 2410 
 2411 2019-12-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2412 
 2413     Add missing includes into Devices module
 2414 
 2415 2020-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2416 
 2417     Exclude PipeCapture read NUL byte unit tests in GitLab CI jobs (!60)
 2418     
 2419     These PipeCapture unit tests are also failing, preventing the
 2420     ubuntu_test CI job passing:
 2421         PipeCaptureTest.ReadEmbeddedNULCharacter
 2422         PipeCaptureTest.ReadNULByteInMiddleOfMultiByteUTF8Character
 2423     
 2424     These tests are also failing locally in both Ubuntu 20.04 LTS and
 2425     Fedora 32 VMs, but not in Ubuntu 18.04 LTS or Fedora 31 VMs.  As this is
 2426     not specifically a Ubuntu docker image update related issue, temporarily
 2427     exclude these failing tests.
 2428     
 2429     Closes !60 - Fix GitLab CI job failures following Ubuntu docker image
 2430                  updates
 2431 
 2432 2020-05-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2433 
 2434     Add C++ compiler into GitLab CI Ubuntu image (!60)
 2435     
 2436     Next the Ubuntu image CI job is failing without a C++ compiler like
 2437     this:
 2438     
 2439         checking whether to enable maintainer-specific portions of Makefiles... yes
 2440         checking for g++... no
 2441         checking for c++... no
 2442         checking for gpp... no
 2443         checking for aCC... no
 2444         checking for CC... no
 2445         checking for cxx... no
 2446         checking for cc++... no
 2447         checking for cl.exe... no
 2448         checking for FCC... no
 2449         checking for KCC... no
 2450         checking for RCC... no
 2451         checking for xlC_r... no
 2452         checking for xlC... no
 2453         checking whether the C++ compiler works... no
 2454         configure: error: in `/builds/mfleetwo/gparted':
 2455         configure: error: C++ compiler cannot create executables
 2456         See `config.log' for more details
 2457         ...
 2458         ERROR: Job failed: exit code 1
 2459     
 2460     The published "Ubuntu" docker image has been updated to Ubuntu 20.04 LTS
 2461     and must no longer include the build tools by default, or not be a
 2462     dependency of any of the other installed packages.  Explicitly install
 2463     build-essential to get the C++ compiler [1].  Also don't list make as
 2464     build-essential includes it.
 2465     
 2466     [1] Installing the GNU C compiler and GNU C++ compiler
 2467         https://help.ubuntu.com/community/InstallingCompilers
 2468     
 2469     Closes !60 - Fix GitLab CI job failures following Ubuntu docker image
 2470                  updates
 2471 
 2472 2020-05-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2473 
 2474     Prevent tzdata install hang in GitLab CI Ubuntu image (!60)
 2475     
 2476     The Ubuntu based GitLab CI jobs have recently started being terminated
 2477     after the default 1 hour timeout.  Installing / updating packages in the
 2478     image is updating the tzdata package which is prompting for input which
 2479     it will never receive, hence the hang.  The end of output from the job
 2480     looks like this:
 2481     
 2482         Setting up tzdata (2020a-0ubuntu0.20.04) ...
 2483         debconf: unable to initialize frontend: Dialog
 2484         debconf: (TERM is not set, so the dialog frontend is not usable.)
 2485         debconf: falling back to frontend: Readline
 2486         Configuring tzdata
 2487         ------------------
 2488         Please select the geographic area in which you live. Subsequent configuration
 2489         questions will narrow this down by presenting a list of cities, representing
 2490         the time zones in which they are located.
 2491           1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
 2492           2. America     5. Arctic     8. Europe    11. SystemV
 2493           3. Antarctica  6. Asia       9. Indian    12. US
 2494         Geographic area:
 2495         ...
 2496         ERROR: Job failed: execution took longer than 1h0m0s seconds
 2497     
 2498     This is a well known issue [1][2][3].  Probably occurring now because of
 2499     a new release of tzdata not included in the base Ubuntu image we are
 2500     using.  Fix by telling the underlying dpkg tools this installation is
 2501     non-interactive.
 2502     
 2503     [1] Avoiding user interaction with tzdata when installing certbot in a
 2504         docker container
 2505         https://askubuntu.com/questions/909277/avoiding-user-interaction-with-tzdata-when-installing-certbot-in-a-docker-contai
 2506     [2] How to install tzdata on a ubuntu docker image?
 2507         https://serverfault.com/questions/949991/how-to-install-tzdata-on-a-ubuntu-docker-image
 2508     [3] apt-get install tzdata noninteractive
 2509         https://stackoverflow.com/questions/44331836/apt-get-install-tzdata-noninteractive
 2510     
 2511     Closes !60 - Fix GitLab CI job failures following Ubuntu docker image
 2512                  updates
 2513 
 2514 2020-05-24  Yi-Jyun Pan <pan93412@gmail.com>
 2515 
 2516     Update Chinese (Taiwan) translation
 2517 
 2518 2020-05-04  Dušan Kazik <prescott66@gmail.com>
 2519 
 2520     Update Slovak translation
 2521 
 2522 2020-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2523 
 2524     Replace TRUE #define with C++ true literal
 2525     
 2526     Everywhere else in the code the lower case true C++ boolean literal is
 2527     used.  Change this one place where upper case TRUE #define was used to
 2528     match.
 2529 
 2530 2020-03-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2531 
 2532     Add /dev/disk/by-id/ symlink in CI for test_BlockSpecial
 2533     
 2534     This previous commit [1] excluded unit test
 2535     BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches because GNOME
 2536     GitLab Docker CI images don't have /dev/disk hierarchy and so no
 2537     symbolic links to block devices.
 2538     
 2539     Create the /dev/disk/by-id directory and a symlink for this unit test to
 2540     use in the new tests/makedev.sh script.
 2541     
 2542     [1] fe2fc33e67980f0b4a5bba958d257be54715f301
 2543         Exclude unit test which fails in Docker CI image (!4)
 2544 
 2545 2020-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2546 
 2547     Exclude unit tests needing losetup in Docker CI image (!59)
 2548     
 2549     test_SupportedFileSystems is another unit test that has been failing
 2550     since 23-Feb-2020 in GNOME GitLab Continuous Integration test jobs.
 2551     Fragments from tests/test-suite.log from a failed test CI job:
 2552     
 2553         FAIL: test_SupportedFileSystems
 2554         ===============================
 2555         ...
 2556         [ RUN      ] My/SupportedFileSystemsTest.Create/lvm2pv
 2557         test_SupportedFileSystems.cc:387: Failure
 2558         Failed
 2559         create_loopdev(): Execute: losetup --find --show 'test_SupportedFileSystems.img'
 2560         losetup: test_SupportedFileSystems.img: failed to set up loop device: No such file or directory
 2561         create_loopdev(): Losetup failed with exit status 1
 2562         create_loopdev(): Failed to create required loop device
 2563         Error: Could not stat device  - No such file or directory.
 2564         test_SupportedFileSystems.cc:446: Failure
 2565         Value of: lp_device != NULL
 2566           Actual: false
 2567         Expected: true
 2568         test_SupportedFileSystems.cc:490: Failure
 2569         Value of: m_fs_object->create(m_partition, m_operation_detail)
 2570           Actual: false
 2571         Expected: true
 2572         Operation details:
 2573         lvm pvcreate -M 2 ''    00:00:00  (ERROR)
 2574     
 2575           WARNING: Failed to connect to lvmetad. Falling back to device scanning.
 2576           Device  not found.
 2577     
 2578         detach_loopdev(): Execute: losetup --detach ''
 2579         losetup: /dev/: detach failed: Inappropriate ioctl for device
 2580         detach_loopdev(): Losetup failed with exit status 1
 2581         detach_loopdev(): Failed to detach loop device.  Test NOT affected
 2582         [  FAILED  ] My/SupportedFileSystemsTest.Create/lvm2pv, where GetParam() = 20 (64 ms)
 2583         ...
 2584         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs
 2585         test_SupportedFileSystems.cc:387: Failure
 2586         Failed
 2587         create_loopdev(): Execute: losetup --find --show 'test_SupportedFileSystems.img'
 2588         losetup: test_SupportedFileSystems.img: failed to set up loop device: No such file or directory
 2589         create_loopdev(): Losetup failed with exit status 1
 2590         create_loopdev(): Failed to create required loop device
 2591         Error: Could not stat device  - No such file or directory.
 2592         test_SupportedFileSystems.cc:446: Failure
 2593         Value of: lp_device != NULL
 2594           Actual: false
 2595         Expected: true
 2596         test_SupportedFileSystems.cc:503: Failure
 2597         Value of: m_fs_object->create(m_partition, m_operation_detail)
 2598           Actual: false
 2599         Expected: true
 2600         Operation details:
 2601         mkfs.btrfs -L '' ''    00:00:00  (ERROR)
 2602         btrfs-progs v4.9.1
 2603         See http://btrfs.wiki.kernel.org for more information.
 2604     
 2605         ERROR: failed to check size for : No such file or directory
 2606     
 2607         detach_loopdev(): Execute: losetup --detach ''
 2608         losetup: /dev/: detach failed: Inappropriate ioctl for device
 2609         detach_loopdev(): Losetup failed with exit status 1
 2610         detach_loopdev(): Failed to detach loop device.  Test NOT affected
 2611         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs, where GetParam() = 7 (11 ms)
 2612     
 2613     All the test_SupportedFileSystems unit tests which need a loop device
 2614     are failing when running losetup like this:
 2615         losetup: <IMAGE_NAME>: failed to setup loop device: No such file or directory
 2616     
 2617     losetup uses /dev/loop-control [1][2] which no longer exists in the
 2618     Docker image.  However even after creating /dev/loop-control in the
 2619     image, losetup continues to fail.  Also tried stracing losetup but that
 2620     fails like this, presumably because it is not allowed inside the Docker
 2621     image:
 2622         $ strace losetup --find --show /tmp/disk.img
 2623         strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
 2624         +++ exited with 1 +++
 2625     
 2626     For now I have run out of ways to investigate and resolve this, so just
 2627     exclude the 12 tests which required loop devices.  All the tests still
 2628     execute when run locally outside the restricted GNOME GitLab CI Docker
 2629     setup.
 2630     
 2631     Closes !59 - Fix GNOME GitLab CI test job failures because of missing
 2632                  /dev entries
 2633 
 2634 2020-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2635 
 2636     Create block special devices needed by test_BlockSpecial in GitLab CI jobs (!59)
 2637     
 2638     From 23-Feb-2020 onwards, GNOME GitLab Continuous Integration test jobs
 2639     have been failing running unit tests which previously succeeded.  With
 2640     some extra debugging added into test_BlockSpecial to print 'bname' and
 2641     'bs' values in the failing tests, here are fragments from
 2642     tests/test-suite.log for the the test_BlockSpecial failures in a test CI
 2643     job:
 2644     
 2645         FAIL: test_BlockSpecial
 2646         =======================
 2647         ...
 2648         [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBlockDevice
 2649         bname="/dev/sr0"
 2650         bs=BlockSpecial{"/dev/sr0",0,0}
 2651         test_BlockSpecial.cc:218: Failure
 2652         Value of: bs.m_major > 0 || bs.m_minor > 0
 2653           Actual: false
 2654         Expected: true
 2655         [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBlockDevice (0 ms)
 2656         ...
 2657         [ RUN      ] BlockSpecialTest.TwoNamedBlockSpecialObjectBlockDevices
 2658         bname1="/dev/sr0"
 2659         bname2="/dev/sda"
 2660         bs1=BlockSpecial{"/dev/sr0",0,0}
 2661         bs2=BlockSpecial{"/dev/sda",0,0}
 2662         test_BlockSpecial.cc:250: Failure
 2663         Value of: bs1.m_major != bs2.m_major || bs1.m_minor != bs2.m_minor
 2664           Actual: false
 2665         Expected: true
 2666         [  FAILED  ] BlockSpecialTest.TwoNamedBlockSpecialObjectBlockDevices (1 ms)
 2667     
 2668     Contents of /proc/partitions inside the Docker image when this test CI
 2669     job failed:
 2670     
 2671         $ cat /proc/partitions
 2672         major minor  #blocks  name
 2673           11        0    1048575 sr0
 2674            8        0  573367448 sda
 2675            8        1  573366407 sda1
 2676     
 2677     And the listing of /dev/:
 2678     
 2679         $ ls -l /dev/
 2680         total 0
 2681         lrwxrwxrwx 1 root root   11 Mar  3 09:00 core -> /proc/kcore
 2682         lrwxrwxrwx 1 root root   13 Mar  3 09:00 fd -> /proc/self/fd
 2683         crw-rw-rw- 1 root root 1, 7 Mar  3 09:00 full
 2684         drwxrwxrwt 2 root root   40 Mar  3 09:00 mqueue
 2685         crw-rw-rw- 1 root root 1, 3 Mar  3 09:00 null
 2686         lrwxrwxrwx 1 root root    8 Mar  3 09:00 ptmx -> pts/ptmx
 2687         drwxr-xr-x 2 root root    0 Mar  3 09:00 pts
 2688         crw-rw-rw- 1 root root 1, 8 Mar  3 09:00 random
 2689         drwxrwxrwt 2 root root   40 Mar  3 09:00 shm
 2690         lrwxrwxrwx 1 root root   15 Mar  3 09:00 stderr -> /proc/self/fd/2
 2691         lrwxrwxrwx 1 root root   15 Mar  3 09:00 stdin -> /proc/self/fd/0
 2692         lrwxrwxrwx 1 root root   15 Mar  3 09:00 stdout -> /proc/self/fd/1
 2693         crw-rw-rw- 1 root root 5, 0 Mar  3 09:00 tty
 2694         crw-rw-rw- 1 root root 1, 9 Mar  3 09:00 urandom
 2695         crw-rw-rw- 1 root root 1, 5 Mar  3 09:00 zero
 2696     
 2697     See how the test_BlockSpecial fixtures are getting major=0 and minor=0
 2698     for the block special devices they are testing with.  This is happening
 2699     because there aren't any entries in /dev for those disks and partitions
 2700     listed in /proc/partitions.  Assume that Docker in GNOME GitLab has
 2701     changed and that unneeded and unwanted devices in /dev are no longer
 2702     being created inside images.
 2703     
 2704     In the test CI jobs execute new script, tests/makedev.sh, to create just
 2705     the first two block special devices mentioned in /proc/partitions needed
 2706     by test_BlockSpecial.
 2707     
 2708     Closes !59 - Fix GNOME GitLab CI test job failures because of missing
 2709                  /dev entries
 2710 
 2711 2020-01-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2712 
 2713     Delete old Fill txtview_device_info_buffer comment
 2714     
 2715     Seems to be referring to how Fill_Label_Device_Info() worked in the
 2716     past, but from history before the beginning of the GIT repository.
 2717     Remove out of date comment.
 2718 
 2719 2020-02-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2720 
 2721     Reliably detect running gpartedbin using pidof (!54)
 2722     
 2723     Debian user reported a bug [1] that when they had PS_FORMAT environment
 2724     variable set it prevented GParted running:
 2725     
 2726         # export PS_FORMAT='ruser,uid,pid,ppid,pri,ni,%cpu,%mem,vsz,rss,stat,tty,start,time,command'
 2727         # gparted
 2728         The process gpartedbin is already running.
 2729         Only one gpartedbin process is permitted.
 2730         # echo $?
 2731         1
 2732     
 2733     Using ps column 'command' includes the command and all it's arguments,
 2734     rather than just the command name as ps displays by default.  Thus the
 2735     shell wrapper finds the grep command it's using when searching for the
 2736     gpartedbin executable.
 2737     
 2738         # ps -e | grep gpartedbin
 2739         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
 2740     
 2741     Fix by searching for running processes using pidof.  pgrep does regular
 2742     expression matching where as pidof checks program name is the same [2].
 2743     Therefore use of pidof is preferred over pgrep [3].
 2744     
 2745     [1] Debian bug #864932 - gparted fails if PS_FORMAT options are
 2746                              specified
 2747         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864932
 2748     
 2749     [2] Difference between pidof and pgrep?
 2750         https://stackoverflow.com/questions/52151698/difference-between-pidof-and-pgrep
 2751     
 2752     [3] [PATCH] gparted.in: Use reliable way of detecting gpartedbin process
 2753         existence
 2754         https://git.alpinelinux.org/aports/tree/community/gparted/gparted.in-Use-reliable-way-of-detecting-gpartedbin-.patch
 2755     
 2756     Closes !54 - Fix gparted not launching when PS_FORMAT environment
 2757                  variable set
 2758 
 2759 2020-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2760 
 2761     Rename local variables to mke2fs_*_ver
 2762     
 2763     To better reflect that they represent the version of mke2fs executable
 2764     from the e2fsprogs package, even though the executable is called as
 2765     mkfs.ext4.
 2766     
 2767         $ ls -il /sbin/mke2fs /sbin/mkfs.ext*
 2768         1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mke2fs
 2769         1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mkfs.ext2
 2770         1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mkfs.ext3
 2771         1978670 -rwxr-xr-x. 4 root root 96384 Aug  9  2019 /sbin/mkfs.ext4
 2772         $ mkfs.ext4 -V
 2773         mke2fs 1.42.9 (28-Dec-2013)
 2774                 Using EXT2FS Library version 1.42.9
 2775         $ mke2fs -V
 2776         mke2fs 1.42.9 (28-Dec-2013)
 2777                 Using EXT2FS Library version 1.42.9
 2778 
 2779 2020-02-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2780 
 2781     Simplify sscanf("mke2fs ...") text match
 2782     
 2783     With removal of support for RHEL / CentOS 5 and it's e4fsprogs package
 2784     [1][2] it is no longer necessary to accept:
 2785         mke4fs 1.41.12 (17-May-2010)
 2786     only:
 2787         mke2fs 1.42.9 (28-Dec-2013)
 2788     
 2789     [1] 6c4ab5dc28a14f3bef2d1c1a24da219381d513f0
 2790         Remove checks for e4fsprogs commands (#794253)
 2791     
 2792     [2] de6e70d933286f3c65187470c9852fb6d8a60a7d
 2793         Simplify ext2::get_filesystem_support() with regard ext4 support (#794253)
 2794 
 2795 2020-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2796 
 2797     Raise minimum supported dosfstools to 3.0.18 (!57)
 2798     
 2799     This earlier commit [1] from 2013 recognised the new names for programs
 2800     in dosfstools >= 3.0.18, specifically mkfs.fat and fsck.fat.  Now that
 2801     the oldest supported distributions use dosfstools >= 3.0.18 it is no
 2802     longer necessary to support using the old names of mkdosfs and dosfsck,
 2803     so remove that code.
 2804     
 2805         Oldest supported   Dosfstools
 2806         distributions      Version
 2807     
 2808         Debian 8           3.0.27
 2809         RHEL / CentOS 7    3.0.20
 2810         SLES 12            3.0.26
 2811         Ubuntu 14.04 LTS   3.0.26
 2812     
 2813     [1] 1ae03dee953f512c0c664369db2d5e5db80b4058
 2814         Recognise new dosfstools program names (#704629)
 2815     
 2816     Closes !57 - Raise minimum support dosfstools to 3.0.18 released
 2817                  2013-06-06
 2818 
 2819 2020-02-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2820 
 2821     Remove unused udevinfo from README
 2822     
 2823     Missed removing mention of udevinfo from README when this earlier commit
 2824     removed it's use by GParted.
 2825         3f15a66291af1f2db142edfe2a9219da219a29d5
 2826         Drop use of long ago removed udevinfo
 2827 
 2828 2020-02-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2829 
 2830     Wait for udev change on /dev/DISK when erasing signatures (#83)
 2831     
 2832     A user reported that formatting a whole disk device with a file system
 2833     failed like this:
 2834     
 2835         Format /dev/sdd as ext4                                    (ERROR)
 2836         + calibrate /dev/sdd                                       (SUCCESS)
 2837             path: /dev/sdd (device)
 2838             start: 0
 2839             end: 15633407
 2840             size: 15633408 (7.45 GiB)
 2841         + clear old file system signatures in /dev/sdd             (SUCCESS)
 2842           + write 512.00 KiB of zeros at byte offset 0             (SUCCESS)
 2843           + write 4.00 KiB of zeros at byte offset 67108864        (SUCCESS)
 2844           + write 512.00 KiB of zeros at byte offset 8003780608    (SUCCESS)
 2845           + write 4.00 KiB of zeros at byte offset 8004239360      (SUCCESS)
 2846           + write 8.00 KiB of zeros at byte offset 8004296704      (SUCCESS)
 2847           + flush operating system cache of /dev/sdd               (SUCCESS)
 2848         + create new ext4 file system                              (ERROR)
 2849           + mkfs.ext4 -F -O ^64bit -L '' '/dev/sdd'                (ERROR)
 2850             mke2fs 1.44.1 (24-Mar-2018)
 2851             /dev/sdd is apparently in use by the system; will not make a filesystem here!
 2852     
 2853     Opening the whole disk block device exclusively causes mkfs.ext4 to
 2854     report that error like this:
 2855     
 2856         # python
 2857         >>> import os
 2858         >>> f = os.open('/dev/sdb',os.O_RDONLY|os.O_EXCL)
 2859         >>> ^Z
 2860         [1]+  Stopped                 python
 2861         # mkfs.ext4 -F -O ^64bit -L '' '/dev/sdb'
 2862         mke2fs 1.42.9 (28-Dec-2013)
 2863         /dev/sdb is apparently in use by the system; will not make a filesystem here!
 2864         # echo $?
 2865         1
 2866     
 2867     I have not been able to reproduce this error, but with debugging and
 2868     sleeping in GParted, stracing GParted and using 'udevadm monitor' to
 2869     watch udev events the following sequence of events is seen:
 2870     
 2871       gparted    |format(partition, operationdetail)
 2872       gparted    |  erase_filesystem_signatures(partition, operationdetail)
 2873       gparted    |    get_device(device_path="/dev/sdb", lp_device, flush=false)
 2874       gparted    |      ped_device_get("/dev/sdb")
 2875       libparted  |        open("/dev/sdb", O_RDONLY) = 11
 2876       libparted  |        close(11)
 2877       gparted    |    ped_device_open(lp_device)
 2878       libparted  |      open("/dev/sdb", O_RDWR) = 11
 2879       gparted    |    ped_device_sync(lp_device)
 2880       libparted  |      ioctl(11, BLKFLSBUF)
 2881       gparted    |    ped_device_close()
 2882       libparted  |      close(11)
 2883       udev(async)|        KERNEL change /devices/.../sdb (block)
 2884       udev(async)|        UDEV   change /devices/.../sdb (block)
 2885       gparted    |  set_partition_type(partition, operationdetail)
 2886       gparted    |  create_filesystem(partition, operationdetail)
 2887       gparted    |    ext2::create(partition, operationdetail)
 2888       gparted    |      FileSystem::execute_command("mkfs.ext4 -F -O ^64bit -L '' '/dev/sdb')
 2889     
 2890     So it is assumed that the processing of the udev change rule after
 2891     closing the block device in erase_filesystem_signatures() overlaps with
 2892     the execution mkfs.ext4 and causes the seen error.  Fix by waiting for
 2893     those udev events to complete as was previously done by commits [1][2]
 2894     [3].
 2895     
 2896     Also note that this is specific to creating file systems on and
 2897     formatting unpartitioned whole disk devices because set_partition_type()
 2898     is a no-operation.  Where as on a partitioned device
 2899     set_partition_type() calls commit() which already waits for udev rules
 2900     to complete [3].
 2901     
 2902     [1] 50c8924a8e4d9cc96a2ea45f13291114402affee
 2903         Wait for udev to recreate /dev/PTN entries when querying partition
 2904         FSs (!46)
 2905     [2] 4f6c312e3bc68cafb5e6035fd4a5b5bbbfcea992
 2906         Wait for udev change on /dev/DISK when querying whole device FS
 2907         (!46)
 2908     [3] 2f53876c0fc8bceddabe739c298e19e7939d9ad7
 2909         Wait for the kernel and udev to settle partitions for a second time
 2910         (#790418)
 2911     
 2912     Closes #83 - /dev/sdd is apparently in use by the system; will not make
 2913                  a filesystem here!
 2914 
 2915 2020-02-25  Daniele Forsi <dforsi@gmail.com>
 2916 
 2917     Fix formatting directive in it.po (!58)
 2918     
 2919     Fixes:
 2920         (gpartedbin:78003): glibmm-WARNING **: 22:55:05.465: invalid
 2921         substitution "%s" in fmt string "percorso: %1 (%s)"
 2922     
 2923     Closes !58 - Fix formatting directive in it.po (!58)
 2924 
 2925 2020-02-26  Nathan Follens <nfollens@gnome.org>
 2926 
 2927     Update Dutch translation
 2928 
 2929 2020-02-23  Daniel Korostil <ted.korostiled@gmail.com>
 2930 
 2931     Update Ukrainian translation
 2932 
 2933 2020-02-04  Daniel Mustieles <daniel.mustieles@gmail.com>
 2934 
 2935     Updated Spanish translation
 2936 
 2937 2020-01-29  Dušan Kazik <prescott66@gmail.com>
 2938 
 2939     Update Slovak translation
 2940 
 2941 2020-01-20  Curtis Gedak <gedakc@gmail.com>
 2942 
 2943     Append -git to version for continuing development
 2944     
 2945     Also fix minor whitespace mistake in NEWS
 2946 
 2947 2020-01-20  Curtis Gedak <gedakc@gmail.com>
 2948 
 2949     ==========   gparted-1.1.0   ==========
 2950 
 2951 2020-01-20  Curtis Gedak <gedakc@gmail.com>
 2952 
 2953     Update copyright years
 2954 
 2955 2020-01-19  A S Alam <amanpreet.alam@gmail.com>
 2956 
 2957     Update Punjabi translation
 2958 
 2959 2020-01-15  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>
 2960 
 2961     Update Latvian translation
 2962 
 2963 2020-01-14  Kukuh Syafaat <kukuhsyafaat@gnome.org>
 2964 
 2965     Update Indonesian translation
 2966 
 2967 2020-01-12  Bruce Cowan <bruce@bcowan.me.uk>
 2968 
 2969     Update British English translation
 2970 
 2971 2020-01-12  Wolfgang Stöggl <c72578@yahoo.de>
 2972 
 2973     Update German translation
 2974 
 2975 2020-01-11  Claude Paroz <claude@2xlibre.net>
 2976 
 2977     Updated French translation
 2978 
 2979 2020-01-11  Trần Ngọc Quân <vnwildman@gmail.com>
 2980 
 2981     Updated Vietnamese translation
 2982     
 2983     Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
 2984 
 2985 2020-01-10  Sveinn í Felli <sv1@fellsnet.is>
 2986 
 2987     Update Icelandic translation
 2988 
 2989 2019-12-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 2990 
 2991     Save all files on CI job failure for investigation
 2992     
 2993     Since patchset !49 "Add file system interface tests" was merged the
 2994     GitLab Continuous Integration jobs have sometimes failed executing
 2995     test_SupportedFilesystems.  So on failure save all files from the docker
 2996     image for 1 week for investigation.
 2997     
 2998     Documentation:
 2999     * Introduction to job artifacts
 3000       https://gitlab.gnome.org/help/user/project/pipelines/job_artifacts.md
 3001     
 3002     * GitLab CI/CD Pipeline Configuration Reference, artifacts
 3003       https://gitlab.gnome.org/help/ci/yaml/README.md#artifacts
 3004 
 3005 2019-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3006 
 3007     Rename TreeView_Detail::treeview_filesystems_Columns member to fsname (!52)
 3008     
 3009     Closes !52 - Rename members and variables currently named 'filesystem'
 3010 
 3011 2019-12-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3012 
 3013     Rename DialogFeatures::treeview_filesystems_Columns member to fsname (!52)
 3014     
 3015     Name the structure member to 'fsname' used to store strings like "ext2"
 3016     etc.  This is equivalent to what was previously done in this commit:
 3017         a9f08ddc7dd615b0ce4eb62098439514605fc998
 3018         Rename local variable to fsname in get_filesystem() (#741430)
 3019     
 3020     Closes !52 - Rename members and variables currently named 'filesystem'
 3021 
 3022 2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3023 
 3024     Rename create_format_menu_add_item() parameter of type FSType (!52)
 3025     
 3026     Closes !52 - Rename members and variables currently named 'filesystem'
 3027 
 3028 2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3029 
 3030     Rename set_device_partitions() local variable of type FSType (!52)
 3031     
 3032     Closes !52 - Rename members and variables currently named 'filesystem'
 3033 
 3034 2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3035 
 3036     Rename Utils method parameters of type FSType (!52)
 3037     
 3038     Closes !52 - Rename members and variables currently named 'filesystem'
 3039 
 3040 2019-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3041 
 3042     Also rename FS.filesystem member to fstype (!52)
 3043     
 3044     Closes !52 - Rename members and variables currently named 'filesystem'
 3045 
 3046 2019-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3047 
 3048     Rename Partition.filesystem member to fstype (!52)
 3049     
 3050     Previously made this change:
 3051         175d27c55d44b87ec873a0b09847e8022011d51f
 3052         Rename enum FILESYSTEM to FSType
 3053     
 3054     Now complete the renaming exercise of members and variables currently
 3055     named 'filesystem'.
 3056     
 3057     Closes !52 - Rename members and variables currently named 'filesystem'
 3058 
 3059 2019-11-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3060 
 3061     Stop requesting partition paths of free space and metadata
 3062     
 3063     In GParted_Core::set_device_partitions() the partition path is being
 3064     queried from libparted.  However this is done before the switch
 3065     statement on the type of the partition, so is called for all libparted
 3066     partition objects including PED_PARTITION_FREESPACE and
 3067     PED_PARTITION_METADATA ones.  As libparted numbers these partition
 3068     objects as -1, it returns paths like "/dev/sda-1".
 3069     
 3070     Additionally when using GParted, with it's default DMRaid handling, on a
 3071     dmraid started array this results in paths like
 3072     "/dev/mapper/isw_ecccdhhiga_MyArray-1" being passed to
 3073     is_dmraid_device() and make_path_dmraid_compatible().  Fortunately
 3074     make_path_dmraid_compatible() does nothing and returns the same name.
 3075     Call chain looks like:
 3076     
 3077         GParted_Core::set_device_partitions()
 3078           get_partition_path(lp_partition)
 3079             // where:
 3080             // lp_partition->disk->dev->path = "/dev/mapper/isw_ecccdhhiga_MyArray"
 3081             // lp_partition->type == PED_PARTITION_FREESPACE |
 3082             //                       PED_PARTITION_METADATA
 3083             //              ->num == -1
 3084             ped_partition_get_path(lp_partition)
 3085               return "/dev/mapper/isw_ecccdhhiga_MyArray-1"
 3086             dmraid.is_dmraid_supported()
 3087             dmraid.is_dmraid_device("/dev/mapper/isw_ecccdhhiga_MyArray-1")
 3088               return true
 3089             dmraid.make_path_dmraid_compatible("/dev/mapper/isw_ecccdhhiga_MyArray-1")
 3090               return "/dev/mapper/isw_ecccdhhiga_MyArray-1"
 3091     
 3092     Fix by moving the get_partition_path() call inside the switch statement
 3093     so that it is only called for PED_PARTITION_NORMAL,
 3094     PED_PARTITION_LOGICAL and PED_PARTITION_EXTENDED partition types.
 3095     
 3096     Relevant commits:
 3097     *   53c49349f71693873805e87856b4c56f2860e6d8
 3098         Simplify logic in set_device_partitions method
 3099     
 3100     *   81986c0990eef65593ef23397074cf61cdca415f
 3101         Ensure partition path name is compatible with dmraid (#622217)
 3102 
 3103 2019-11-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3104 
 3105     Make 4 internally used only DMRaid methods private
 3106 
 3107 2019-11-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3108 
 3109     Recognise ATARAID members started by dmraid (#75)
 3110     
 3111     This is not strictly necessary as members are already recognised using
 3112     blkid since this commit earlier in the sequence "Recognise ATARAID
 3113     members (#75)".  However it makes sure active members are recognised
 3114     even if blkid is not available and matches how file system detection
 3115     queries the SWRaid_Info module.
 3116     
 3117     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3118 
 3119 2019-11-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3120 
 3121     Display array device as mount point of dmraid started ATARAID members (#75)
 3122     
 3123     This matches how the array device is displayed as the mount point for
 3124     mdadm started ATARAID members by "Display array device as mount point of
 3125     mdadm started ATARAID members (#75)" earlier in this patchset.
 3126     
 3127     Extend the DMRaid module member cache to save the array device name and
 3128     use as needed to display as the mount point.
 3129     
 3130     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3131 
 3132 2019-11-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3133 
 3134     Detect busy status of dmraid started ATARAID members (#75)
 3135     
 3136     Again this is to stop GParted allowing overwrite operations being
 3137     performed on an ATARAID member while the array is actively using the
 3138     member.  This time for dmraid started arrays using the kernel DM (Device
 3139     Mapper) driver.
 3140     
 3141     The DMRaid module already uses dmraid to report active array names:
 3142     
 3143         # dmraid -sa -c
 3144         isw_ecccdhhiga_MyArray
 3145     
 3146     To find active members in this array, (1) use udev to lookup the kernel
 3147     device name:
 3148     
 3149         # udevadm info --query=name /dev/mapper/isw_ecccdhhiga_MyArray
 3150         dm-0
 3151     
 3152     (2) list the member names exposed by the kernel DM driver through the
 3153     /sys file system.
 3154     
 3155         # ls /sys/block/dm-0/slaves
 3156         sdc  sdd
 3157         # ls -l /sys/block/dm-0/slaves
 3158         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
 3159         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
 3160     
 3161     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3162 
 3163 2019-11-21  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3164 
 3165     Enable basic supported actions for ATARAID members (#75)
 3166     
 3167     When an ATARAID member is inactive allow basic supported actions of
 3168     copy and move to be performed like with other recognised but only basic
 3169     supported types.
 3170     
 3171     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3172 
 3173 2019-11-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3174 
 3175     Prevent unmount of busy ATARAID members (#75)
 3176     
 3177     Since earlier commit "Display array device as mount point of mdadm
 3178     started ATARAID members (#75)" GParted allows attempting to unmout a
 3179     busy ATARAID member as if it was a file system.  This is not a valid
 3180     thing to do, so disallow it.
 3181     
 3182     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3183 
 3184 2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3185 
 3186     Display array uuid of mdadm recognised ATARAID members (#75)
 3187     
 3188     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3189 
 3190 2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3191 
 3192     Display array device as mount point of mdadm started ATARAID members (#75)
 3193     
 3194     This matches how other non-file systems are handled, by displaying the
 3195     access reference in the mount point column.  For LVM Physical Volumes
 3196     the Volume Group name is displayed [1] and for an active Linux Software
 3197     RAID array the array device is displayed [2].
 3198     
 3199     [1] 8083f11d84dbd4f186271a3cdbf5170db259f8b8
 3200         Display LVM2 VGNAME as the PV's mount point (#160787)
 3201     
 3202     [2] f6c2f00df7858a7f4b97e699b9bcf1023bba850a
 3203         Populate member mount point with SWRaid array device (#756829)
 3204     
 3205     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3206 
 3207 2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3208 
 3209     Detect busy status of mdadm started ATARAID members (#75)
 3210     
 3211     This stops GParted allowing overwrite operations (such as create
 3212     partition table or format with a whole device file system) being
 3213     performed on an ATARAID member while the array is actively using the
 3214     member.
 3215     
 3216     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3217 
 3218 2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3219 
 3220     Display correct type of mdadm recognised ATARAID members (#75)
 3221     
 3222     The previous commit, made mdadm recognised IMSM and DDF type ATARAID
 3223     members get displayed as "linux-raid" (Linux Software RAID array
 3224     member).  This was because of query method 1 in detect_filesystems().
 3225     
 3226     Fix this now by exposing and using the fstype of the member from the
 3227     SWRaid_Info cache.
 3228     
 3229     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3230 
 3231 2019-11-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3232 
 3233     Parse ATARAID members from mdadm output and /proc/mdstat (#75)
 3234     
 3235     Since mdadm release 3.0 (2009-06-02) [1] it has also supported external
 3236     metadata formats IMSM (Intel Matrix Storage Manager) and DDF, previously
 3237     only managed by dmraid.
 3238     
 3239     A number of distributions have switched to use mdadm and kernel MD
 3240     (Multiple Devices) driver for managing these Firmware / BIOS / ATARAID
 3241     arrays.  These include: Fedora >= 14 [2], RHEL / CentOS >= 6 [3],
 3242     SLES >= 12 [4], Ubuntu >= 16.04 LTS.
 3243     
 3244     Therefore additionally parse members in these ATARAID arrays included in
 3245     mdadm output, and when activated using the kernel MD driver, in file
 3246     /proc/mdstat.  Add fstype to the SWRaid_Info cache records to
 3247     distinguish members apart.  So far the rest of the GParted code
 3248     continues to treat all members as FS_LINUX_SWRAID.  This will be
 3249     resolved in following commits.
 3250     
 3251     Note that this in no way affects how GParted shows and partitions the
 3252     array device itself, even those managed by dmraid and use the GParted
 3253     DMRaid module.  It only affects how GParted shows the member drives
 3254     themselves.
 3255     
 3256     [1] mdadm ANNOUNCE-3.0 file
 3257         https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/tree/ANNOUNCE-3.0?h=mdadm-3.0
 3258     
 3259     [2] Fedora 14, Storage Administration Guide, 12.5. Linux RAID Subsystem
 3260         https://docs.fedoraproject.org/en-US/Fedora/14/html/Storage_Administration_Guide/raid-subsys.html
 3261         "...  Fedora 14 uses mdraid with external metadata to access ISW /
 3262         IMSM (Intel firmware RAID) sets.  mdraid sets are configured and
 3263         controlled through the mdadm utility."
 3264     
 3265     [3] RHEL 6, Storage Administration Guide, 17.3. Linux RAID Subsystem
 3266         https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/storage_administration_guide/raid-subsys
 3267         "mdraid also supports other metadata formats, known as external
 3268         metadata.  Red Hat Enterprise Linux 6 uses mdraid with external
 3269         metadata to access ISW / IMSM (Intel firmware RAID) sets.  mdraid
 3270         sets are configured and controlled through the mdadm utility."
 3271     
 3272     [4] SUSE Linux Enterprise Server 12 Release Notes, 7.2.3 Driver for IMSM
 3273         and DDF
 3274         https://www.suse.com/releasenotes/x86_64/SUSE-SLES/12/#fate-316007
 3275         "For IMSM and DDF RAIDs the mdadm driver is used unconditionally."
 3276     
 3277     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3278 
 3279 2019-11-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3280 
 3281     Recognise ATARAID members (#75)
 3282     
 3283     PATCHSET OVERVIEW
 3284     
 3285     A user had a Firmware / BIOS / ATARAID array of 2 devices configured as
 3286     a RAID 0 (stripe) set.  On top of that was a GPT with the OS partitions.
 3287     GParted displays the following errors on initial load and subsequent
 3288     refresh:
 3289     
 3290             Libparted Error
 3291         (-) Invalid argument during seek for read on /dev/sda
 3292                               [ Retry ] [ Cancel ] [ Ignore ]
 3293     
 3294             Libparted Error
 3295         (-) The backup GPT table is corrupt, but the
 3296             primary appears OK, so that will be used.
 3297                                   [  Ok  ] [ Cancel ]
 3298     
 3299     This is an Intel Software RAID array which stores metadata at the end of
 3300     each member device, and so the first 128 KiB stripe of the set is stored
 3301     in the first 128 KiB of the first member device /dev/sda which includes
 3302     the GPT for the whole RAID 0 device.  Hence when libparted reads member
 3303     device /dev/sda it finds a GPT describing a block device twice it's
 3304     size and in results the above errors when trying to read the backup GPT.
 3305     
 3306     A more dangerous scenario occurs when using 2 devices configured in an
 3307     Intel Software RAID 1 (mirrored) set with GPT on top.  On refresh
 3308     GParted display this error for both members, /dev/sda and /dev/sdb:
 3309     
 3310             Libparted Warning
 3311         /!\ Not all of the space available to /dev/sda appears to be used,
 3312             you can fix the GPT to use all of the space (an extra 9554
 3313             blocks) or continue with the current setting?
 3314                                                       [  Fix  ] [ Ignore ]
 3315     
 3316     Selecting [Fix] gets libparted to re-write the backup GPT to the end of
 3317     the member device, overwriting the ISW metadata!  Do that twice and both
 3318     copies of the metadata are gone!
 3319     
 3320     Worked example of this more dangerous mirrored set case.  Initial setup:
 3321     
 3322         # dmraid -s
 3323         *** Group superset isw_caffbiaegi
 3324         --> Subset
 3325         name   : isw_caffbiaegi_MyMirror
 3326         size   : 16768000
 3327         stride : 128
 3328         type   : mirror
 3329         status : ok
 3330         subsets: 0
 3331         devs   : 2
 3332         spares : 0
 3333     
 3334         # dmraid -r
 3335         /dev/sda: isw, "isw_caffbiaegi", GROUP, ok, 16777214 sectors, data@ 0
 3336         /dev/sdb: isw, "isw_caffbiaegi", GROUP, ok, 16777214 sectors, data@ 0
 3337     
 3338         # wipefs /dev/sda
 3339         offset               type
 3340         ---------------------------------------------
 3341         0x200                gpt   [partition table]
 3342         0x1fffffc00          isw_raid_member   [raid]
 3343     
 3344     Run GParted and click [Fix] on /dev/sda.  Now the first member has gone:
 3345     
 3346         # dmraid -s
 3347         *** Group superset isw_caffbiaegi
 3348         --> *Inconsistent* Subset
 3349         name   : isw_caffbiaegi_MyMirror
 3350         size   : 16768000
 3351         stride : 128
 3352         type   : mirror
 3353         status : inconsistent
 3354         subsets: 0
 3355         devs   : 1
 3356         spares : 0
 3357     
 3358         # dmraid -r
 3359         /dev/sdb: isw, "isw_caffbiaegi", GROUP, ok, 16777214 sectors, data@ 0
 3360     
 3361         # wipefs /dev/sda
 3362         offset               type
 3363         ---------------------------------------------
 3364         0x200                gpt   [partition table]
 3365     
 3366     Click [Fix] on /dev/sdb.  Now all members of the array are gone:
 3367     
 3368         # dmraid -s
 3369         no raid disks
 3370     
 3371         # dmraid -r
 3372         no raid disks
 3373     
 3374         # wipefs /dev/sdb
 3375         offset               type
 3376         ---------------------------------------------
 3377         0x200                gpt   [partition table]
 3378     
 3379     So GParted must not run libparted partition table scanning on the member
 3380     devices in ATARAID arrays.  Only on the array device itself.
 3381     
 3382     In terms of the UI GParted must show disks which are ATARAID members as
 3383     whole disk devices with ATARAID member content and detect array busy
 3384     status to avoid allowing active members from being overwritten while in
 3385     use.
 3386     
 3387     THIS COMMIT
 3388     
 3389     Recognise ATARAID member devices and display in GParted as whole device
 3390     "ataraid" file systems.  Because they are recognised as whole device
 3391     content ("ataraid" file systems) this alone stops GParted running the
 3392     libparted partition table scanning and avoids the above errors.
 3393     
 3394     The list of dmraid supported formats is matched by the signatures
 3395     recognised by blkid:
 3396     
 3397         $ dmraid -l
 3398         asr     : Adaptec HostRAID ASR (0,1,10)
 3399         ddf1    : SNIA DDF1 (0,1,4,5,linear)
 3400         hpt37x  : Highpoint HPT37X (S,0,1,10,01)
 3401         hpt45x  : Highpoint HPT45X (S,0,1,10)
 3402         isw     : Intel Software RAID (0,1,5,01)
 3403         jmicron : JMicron ATARAID (S,0,1)
 3404         lsi     : LSI Logic MegaRAID (0,1,10)
 3405         nvidia  : NVidia RAID (S,0,1,10,5)
 3406         pdc     : Promise FastTrack (S,0,1,10)
 3407         sil     : Silicon Image(tm) Medley(tm) (0,1,10)
 3408         via     : VIA Software RAID (S,0,1,10)
 3409         dos     : DOS partitions on SW RAIDs
 3410     
 3411         $ fgrep -h _raid_member util-linux/libblkid/src/superblocks/*.c
 3412                 .name           = "adaptec_raid_member",
 3413                 .name           = "ddf_raid_member",
 3414                 .name           = "hpt45x_raid_member",
 3415                 .name           = "hpt37x_raid_member",
 3416                 .name           = "isw_raid_member",
 3417                 .name           = "jmicron_raid_member",
 3418                 .name           = "linux_raid_member",
 3419                 .name           = "lsi_mega_raid_member",
 3420                 .name           = "nvidia_raid_member",
 3421                 .name           = "promise_fasttrack_raid_member",
 3422                 .name           = "silicon_medley_raid_member",
 3423                 .name           = "via_raid_member",
 3424     
 3425     As they are all types of Firmware / BIOS / ATARAID arrays, report all
 3426     members as a single "ataraid" file system type.  (Except for
 3427     "linux_raid_member" in the above blkid source listing which is Linux
 3428     Software RAID).
 3429     
 3430     Closes #75 - Errors with GPT on RAID 0 ATARAID array
 3431 
 3432 2019-12-01  Andre Klapper <a9016009@gmx.de>
 3433 
 3434     Fix an incorrect translation in the Spanish user help
 3435     
 3436     See #80
 3437 
 3438 2019-12-01  Andre Klapper <a9016009@gmx.de>
 3439 
 3440     Fix typo in Spanish translation of user help
 3441     
 3442     Fixes #80
 3443 
 3444 2019-11-28  Daniel Mustieles <daniel.mustieles@gmail.com>
 3445 
 3446     Updated Spanish translation
 3447 
 3448 2019-11-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3449 
 3450     Add missing includes into jfs.cc
 3451 
 3452 2019-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3453 
 3454     Remove unallocated space comment from HACKING file (!50)
 3455     
 3456     The HACKING file should be hints for making changes to the code base and
 3457     associated processes.  A overview of how GParted handled unallocated
 3458     space was not that.  Also now the size of a JFS is accurately calculated
 3459     using JFS as an example of a file system with intrinsic unallocated
 3460     space is no longer valid.  Therefore removed from the HACKING file.
 3461     Instead add the original commit message as an extended comment to method
 3462     calc_significant_unallocated_sectors().
 3463     
 3464     Closes !50 - Calculate JFS size accurately
 3465 
 3466 2019-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3467 
 3468     Calculate mounted JFS size accurately (!50)
 3469     
 3470     With the same minimum sized 16 MiB JFS used in the previous commit, now
 3471     mounted, GParted once again reports 1.20 MiB of unallocated space.  This
 3472     is because the kernel JFS driver is also just reporting the size of the
 3473     Aggregate Disk Map (dmap) as the size of the file system [1].
 3474     
 3475     Fix by reading the on disk JFS superblock to calculate the size of the
 3476     file system, but query the free space from the kernel using statvfs().
 3477     Need to query mounted JFS free space from the kernel because the on disk
 3478     dmap is not updated immediately so doesn't reflect recently used or
 3479     freed disk space.
 3480     
 3481     For example, start with the 16 MiB JFS empty and mounted.
 3482     
 3483         # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
 3484         [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
 3485         # df -k /mnt/1
 3486         Filesystem     1K-blocks  Used Available Use% Mounted on
 3487         /dev/sdb1          15152   136     15016   1% /mnt/1
 3488     
 3489     Write 10 MiB of data to it:
 3490     
 3491         # dd if=/dev/zero bs=1M count=10 of=/mnt/1/file_10M
 3492         10+0 records in
 3493         10+0 records out
 3494         1048760 bytes (10 MB, 10 MiB) copied, 0.0415676 s, 252 MB/s
 3495     
 3496     Query the file system free space from the kernel and by reading the on
 3497     disk dmap figure:
 3498     
 3499         # df -k /mnt/1
 3500         Filesystem     1K-blocks  Used Available Use% Mounted on
 3501         /dev/sdb1          15152 10376      4776  69% /mnt/1
 3502         # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
 3503         [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
 3504     
 3505         # sync
 3506         # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
 3507         [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
 3508     
 3509         # umount /mnt/1
 3510         # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1 | fgrep dn_nfree
 3511         [2] dn_nfree:           0x000000004aa   [10] dn_agwidth:        1
 3512     
 3513     The kernel reports the updated usage straight away, but the on disk dmap
 3514     record doesn't get updated even by sync, only after unmounting.
 3515     
 3516     This is the same fix as was previously done for EXT2/3/4 [2].
 3517     
 3518     [1] Linux jfs_statfs() function
 3519         https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/jfs/super.c?h=v3.10#n142
 3520     
 3521     [2] 3828019030f981cc5b3411badc40704f5525fdb3
 3522         Read file system size for mounted ext2/3/4 from superblock (#683255)
 3523     
 3524     Closes !50 - Calculate JFS size accurately
 3525 
 3526 2019-11-05  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3527 
 3528     Calculate unmounted JFS size accurately (!50)
 3529     
 3530     Create the smallest possible JFS (16 MiB) and GParted will report
 3531     1.2 MiB of unallocated space.  This is because the size of the Aggregate
 3532     Disk Map (dmap) was used as the size of the file system.  However after
 3533     reading the source code to mkfs.jfs, it separately accounts for the size
 3534     of the Log (Journal) and the FSCK Working Space.  The size of a JFS is
 3535     the sum of these 3 components added together.
 3536     
 3537     Using the minimum 16 MiB JFS as an example:
 3538     
 3539         # jfs_debugfs /dev/sdb1
 3540         jfs_debugfs version 1.1.15, 04-Mar-2011
 3541     
 3542         Aggregate Block Size: 4096
 3543     
 3544         > superblock
 3545         [1] s_magic:            'JFS1'          [15] s_ait2.addr1:      0x00
 3546         [2] s_version:          1               [16] s_ait2.addr2:      0x00000018
 3547         [3] s_size:     0x0000000000007660           s_ait2.address:    24
 3548         [4] s_bsize:            4096            [17] s_logdev:          0x00000000
 3549         [5] s_l2bsize:          12              [18] s_logserial:       0x00000000
 3550         [6] s_l2bfactor:        3               [19] s_logpxd.len:      256
 3551         [7] s_pbsize:           512             [20] s_logpxd.addr1:    0x00
 3552         [8] s_l2pbsize:         9               [21] s_logpxd.addr2:    0x00000f00
 3553         [9] pad:                Not Displayed        s_logpxd.address:  3840
 3554         [10] s_agsize:          0x00002000      [22] s_fsckpxd.len:     52
 3555         [11] s_flag:            0x10200900      [23] s_fsckpxd.addr1:   0x00
 3556                                 JFS_LINUX       [24] s_fsckpxd.addr2:   0x00000ecc
 3557                 JFS_COMMIT      JFS_GROUPCOMMIT      s_fsckpxd.address: 3788
 3558                                 JFS_INLINELOG   [25] s_time.tv_sec:     0x5dbbdfa0
 3559                                                 [26] s_time.tv_nsec:    0x00000000
 3560                                                 [27] s_fpack:           'small_jfs'
 3561         [12] s_state:           0x00000000
 3562                      FM_CLEAN
 3563         [13] s_compress:        0
 3564         [14] s_ait2.len:        4
 3565     
 3566         display_super: [m]odify or e[x]it: x
 3567         > dmap
 3568     
 3569         Block allocation map control page at block 16
 3570     
 3571         [1] dn_mapsize:         0x00000000ecc   [9] dn_agheigth:        0
 3572         [2] dn_nfree:           0x00000000eaa   [10] dn_agwidth:        1
 3573         [3] dn_l2nbperpage:     0               [11] dn_agstart:        341
 3574         [4] dn_numag:           1               [12] dn_agl2size:       13
 3575         [5] dn_maxlevel:        0               [13] dn_agfree:         type 'f'
 3576         [6] dn_maxag:           0               [14] dn_agsize:         8192
 3577         [7] dn_agpref:          0               [15] pad:               Not Displayed
 3578         [8] dn_aglevel:         0
 3579         display_dbmap: [m]odify, [f]ree count, [t]ree, e[x]it > x
 3580         > quit
 3581     
 3582     Values of interest:
 3583         s_size        - Aggregate size in device (s_pbsize) blocks
 3584         s_bsize       - Aggregate block (aka file system allocation) size in
 3585                         bytes
 3586         s_pbsize      - Physical (device) block size in bytes
 3587         s_logpxd.len  - Log (Journal) size in Aggregate (s_bsize) blocks
 3588         s_fsckpxd.len - FSCK Working Space in Aggregate (s_bsize) blocks
 3589         dn_nfree      - Number of free (s_bsize) blocks in Aggregate
 3590     
 3591     Calculation:
 3592         file system size = s_size * s_pbsize
 3593                          + s_logpxd.len * s_bsize
 3594                          + s_fsckpxd.len * s_bsize
 3595                          = 30304 * 512
 3596                          + 256 * 4096
 3597                          + 52 * 4096
 3598                          =  16777216
 3599                             (Exactly 16 MiB.  The size of the partition.)
 3600         free space = dn_nfree * s_bsize
 3601                    = 3754 * 4096
 3602                    = 15376384
 3603     
 3604     Rewrite JFS usage querying code to use this updated calculation.
 3605     
 3606     [1] JFS Overview / How the Journaled File System cuts system restart
 3607         times to the quick
 3608         http://jfs.sourceforge.net/project/pub/jfs.pdf
 3609     [2] JFS Layout / How the Journaled File systems handles the on-disk
 3610         layout
 3611         http://jfs.sourceforge.net/project/pub/jfslayout.pdf
 3612     [3] mkfs.jfs source code
 3613         http://jfs.sourceforge.net/project/pub/jfsutils-1.1.15.tar.gz
 3614         mkfs/mkfs.c
 3615         Selected lines from mkfs/mkfs.c
 3616             create_aggregate(..., number_of_blocks, ..., logsize, ...)
 3617                 number_of_blocks -= fsck_wspace_length;
 3618                 aggr_superblock.s_size = number_of_blocks * (aggr_block_size / phys_block_size);
 3619                 aggr_superblock.s_bsize = aggr_block_size;
 3620                 aggr_superblock.s_pbsize = phys_block_size;
 3621                 PXDlength(&aggr_superblock.s_logpxd, logsize);
 3622                 PXDlength(&aggr_superblock.s_fsckpxd, fsck_wspace_length);
 3623             main()
 3624                 number_of_bytes = bytes_on_device;
 3625                 number_of_blocks = number_of_bytes / agg_block_size;
 3626                 logsize = logsize_in_bytes / aggr_block_size;
 3627                 number_of_blocks -= logsize;
 3628                 create_aggregate(..., number_of_blocks, ..., logsize, ...);
 3629     
 3630     Closes !50 - Calculate JFS size accurately
 3631 
 3632 2019-11-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3633 
 3634     Update name of the NILFS2 specific package
 3635     
 3636     Upstream NILFS project calls the package nilfs-utils [1][2].  Arch Linux
 3637     / CentOS / Fedora / OpenSUSE use the upstream name.  However Debian /
 3638     Ubuntu name it nilfs-tools [3] instead.
 3639     
 3640     Document the needed software as:
 3641     
 3642         nilfs-utils / nilfs-tools
 3643     
 3644     Upstream name first separated by slash from alternative names
 3645     distributions use.
 3646     
 3647     [1] NILFS Download page
 3648         https://nilfs.sourceforge.io/en/download.html
 3649     [2] NILFS Public Git Repositories
 3650         https://nilfs.sourceforge.io/en/git_repos.html
 3651     [3] Debian package: nilfs-tools
 3652         https://packages.debian.org/sid/nilfs-tools
 3653 
 3654 2019-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3655 
 3656     Add missing libuuid-devel build dependency for Fedora into README
 3657 
 3658 2019-10-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3659 
 3660     Avoid crash reading JFS usage on Fedora 30 (!49)(#794947)
 3661     
 3662     Running JFS read usage test on Fedora 30 fails like this:
 3663     
 3664         $ ./test_SupportedFileSystems --gtest_filter='*ReadUsage/jfs'
 3665     ...
 3666         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs
 3667         unknown file: Failure
 3668         C++ exception with description "std::bad_alloc" thrown in the test body.
 3669         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (41833 ms)
 3670     
 3671     However the same test passes on Fedora 29, Fedora 31 Beta, CentOS 7,
 3672     Debian 10 and Ubuntu 18.04 LTS.
 3673     
 3674     Also running GParted on Fedora 30 crashes just the same when reading JFS
 3675     usage:
 3676     
 3677         # gparted
 3678         GParted 1.0.0
 3679         configuration --enable-libparted-dmraid --enable-online-resize
 3680         libparted 3.2
 3681         terminate called after throwing an instance of 'std::bad_alloc'
 3682           what():  std::bad_alloc
 3683         /usr/bin/gparted: line 202: 19218 Aborted                 (core dumped) $BASE_CMD
 3684     
 3685     Running jfs_debugfs to query the file system usage the same way GParted
 3686     does produces an infinite amount of repeating output:
 3687     
 3688         # echo dm | jfs_debugfs /dev/sdb1
 3689     
 3690     So jfs_debugfs gets stuck in an infinite loop inside the dmap subcommand
 3691     when it encounters EOF.  GParted and the read JFS usage test read this
 3692     output until memory is exhausted and crash.  This is exactly what was
 3693     happening in closed bug 794947.  Even installed jfsutils from Fedora 29
 3694     on Fedora 30 and visa versa.  jfs_debugfs still produced an infinite
 3695     amount of output on Fedora 30 and worked correctly on Fedora 29.  So
 3696     it's not the build of jfsutils, but something in the OS that is making
 3697     the difference!
 3698     
 3699     Anyway fix by providing the instruction to exit from the dmap
 3700     subcommand, and quit from jfs_debugfs itself, like this:
 3701     
 3702         # echo -e 'dmap\nx\nquit' | jfs_debugfs /dev/sdb1
 3703     
 3704     Bug 794947 - gparted hangs when sees JFS partition on discovering
 3705                  partitions
 3706     Closes !49 - Add file system interface tests
 3707 
 3708 2019-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3709 
 3710     Accept FS usage figures within significant unallocated threshold (!49)
 3711     
 3712     So far the read file system usage figures, read via the file system
 3713     interface classes using file system specific tools, have been checked to
 3714     the exact sector for:
 3715          0 <= used <= size
 3716          0 <= unused <= size
 3717          unallocated = 0
 3718          used + unused = size
 3719     
 3720     However for JFS and NTFS this fails like this:
 3721     
 3722         # ./test_SupportedFileSystems --gtest_filter='*ReadUsage/*' | fgrep ' ms'
 3723         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs (335 ms)
 3724         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/exfat (0 ms)
 3725         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext2 (38 ms)
 3726         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext3 (131 ms)
 3727         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/ext4 (32 ms)
 3728         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/f2fs (47 ms)
 3729         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/fat16 (19 ms)
 3730         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/fat32 (48 ms)
 3731         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/hfs (0 ms)
 3732         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/hfsplus (0 ms)
 3733         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (73 ms)
 3734         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/linuxswap (20 ms)
 3735         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/luks (0 ms)
 3736         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/lvm2pv (410 ms)
 3737         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/minix (0 ms)
 3738         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2 (226 ms)
 3739         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 (56 ms)
 3740         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/reiser4 (49 ms)
 3741         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/reiserfs (139 ms)
 3742         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/udf (34 ms)
 3743         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/xfs (67 ms)
 3744         [----------] 21 tests from My/SupportedFileSystemsTest (1726 ms total)
 3745         [==========] 21 tests from 1 test case ran. (1726 ms total)
 3746     
 3747         # ./test_SupportedFileSystems --gtest_filter='*ReadUsage/jfs:*ReadUsage/ntfs'
 3748         Running main() from test_SupportedFileSystems.cc
 3749         Note: Google Test filter = *ReadUsage/jfs:*ReadUsage/ntfs
 3750         [==========] Running 2 tests from 1 test case.
 3751         [----------] Global test environment set-up.
 3752         [----------] 2 tests from My/SupportedFileSystemsTest
 3753         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs
 3754         test_SupportedFileSystems.cc:465: Failure
 3755         Expected equality of these values:
 3756           m_partition.sectors_unallocated
 3757             Which is: 2472
 3758           0
 3759         test_SupportedFileSystems.cc:517: Failure
 3760         Expected equality of these values:
 3761           m_partition.sectors_used + m_partition.sectors_unused
 3762             Which is: 521816
 3763           m_partition.get_sector_length()
 3764             Which is: 524288
 3765         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17 (36 ms)
 3766         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs
 3767         test_SupportedFileSystems.cc:465: Failure
 3768         Expected equality of these values:
 3769           m_partition.sectors_unallocated
 3770             Which is: 8
 3771           0
 3772         test_SupportedFileSystems.cc:517: Failure
 3773         Expected equality of these values:
 3774           m_partition.sectors_used + m_partition.sectors_unused
 3775             Which is: 524280
 3776           m_partition.get_sector_length()
 3777             Which is: 524288
 3778         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23 (35 ms)
 3779         [----------] 2 tests from My/SupportedFileSystemsTest (71 ms total)
 3780     
 3781         [----------] Global test environment tear-down
 3782         [==========] 2 tests from 1 test case ran. (72 ms total)
 3783         [  PASSED  ] 0 tests.
 3784         [  FAILED  ] 2 tests, listed below:
 3785         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17
 3786         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23
 3787     
 3788          2 FAILED TESTS
 3789     
 3790     So JFS is reporting 2472 unallocated sectors in a size of 524288 sectors
 3791     and NTFS is reporting 8 unallocated sectors in the same size.  This
 3792     exact issue is already solved for GParted so that it doesn't show a
 3793     small amount of unallocated space by commits [1][2] from Bug 499202 [3].
 3794     
 3795     Fix the same way, use the accessors to the file system usage figures
 3796     which don't show unallocated space when it is below the significant
 3797     threshold.
 3798     
 3799     [1] b5c80f18a9ce27fda2b11e9b590d7f856209ac32
 3800         Enhance calculation of significant unallocated space (#499202)
 3801     
 3802     [2] 7ebedc4bb3b81e85fb4c628a2a05308ada147d68
 3803         Don't show intrinsic unallocated space (#499202)
 3804     
 3805     [3] Bug 499202 - gparted does not see the difference if partition size
 3806                      differs from filesystem size
 3807         https://bugzilla.gnome.org/show_bug.cgi?id=499202
 3808     
 3809     Closes !49 - Add file system interface tests
 3810 
 3811 2019-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3812 
 3813     Skip Check MINIX file system interface test (!49)
 3814     
 3815     Checking a MINIX V3 file system fails like this:
 3816     
 3817         $ ./test_SupportedFileSystems --gtest_filter='*Check/minix'
 3818     ...
 3819         [ RUN      ] My/SupportedFileSystemsTest.CreateAndCheck/minix
 3820         test_SupportedFileSystems.cc:554: Failure
 3821         Value of: m_fs_object->check_repair(m_partition, m_operation_detail)
 3822           Actual: false
 3823         Expected: true
 3824         Operation details:
 3825         mkfs.minix -3 '/home/centos/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (SUCCESS)
 3826         87392 inodes
 3827         262144 blocks
 3828         Firstdatazone=5507 (5507)
 3829         Zonesize=1024
 3830         Maxsize=2147483647
 3831     
 3832         fsck.minix '/home/centos/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
 3833         fsck.minix from util-linux 2.23.2
 3834         bad magic number in super-block
 3835         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndCheck/minix, where GetParam() = 21 (182 ms)
 3836     
 3837     fsck.minix doesn't support checking MINIX V3 file systems until this
 3838     commit, first included in util-linux 2.27 released 2015-09-07.
 3839     
 3840         https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=86a9f3dad58addb50eca9daa9d233827a005dad7
 3841         fsck.minix: add minix v3 support
 3842     
 3843     CentOS 7 only includes util-linux 2.23.2 so is affected by this, however
 3844     Ubuntu 18.04 LTS includes util-linux 2.31.1 so is not affected.
 3845     
 3846     Just always skip this test for now.  Plan to re-enable later when the
 3847     oldest supported distributions and GitLab CI images include the needed
 3848     util-linux release.
 3849     
 3850     Closes !49 - Add file system interface tests
 3851 
 3852 2019-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3853 
 3854     Write new UUID to JFS before testing reading UUID (!49)
 3855     
 3856     Testing reading the UUID from a newly created JFS was failing like this:
 3857     
 3858         $ ./test_SupportedFileSystems --gtest_filter='*ReadUUID/jfs'
 3859     ...
 3860         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/jfs
 3861         test_SupportedFileSystems.cc:552: Failure
 3862         Expected: (m_partition.uuid.size()) >= (9U), actual: 0 vs 9
 3863         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/jfs, where GetParam() = 17 (57 ms)
 3864     
 3865     Mkfs.jfs creates a file system as version 1.  It does have a UUID and
 3866     blkid can report it, but jfs_tune doesn't report it.
 3867     
 3868         $ touch -s 256M test_jfs.img
 3869         $ mkfs.jfs -q test_jfs.img
 3870         mkfs.jfs version 1.1.15, 04-Mar-2011
 3871     
 3872         Format completed successfully.
 3873     
 3874         262144 kilobytes total disk space.
 3875         $ blkid test_jfs.img
 3876         test_jfs.img: UUID="6b0bb46a-a240-47b4-89ab-1fe759aa572d" TYPE="jfs"
 3877     
 3878         $ jfs_tune -l test_jfs.img | egrep 'version|UUID'
 3879         jfs_tune version 1.1.15, 04-Mar-2011
 3880         JFS version:                1
 3881     
 3882         $ hexdump -C test_jfs.img
 3883         00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 3884         *
 3885         00008000  4a 46 53 31 01 00 00 00  58 f6 07 00 00 00 00 00  |JFS1....X.......|
 3886     Version >---------------- ^^ ^^ ^^ ^^
 3887     ...
 3888         00008080  00 00 00 00 00 00 00 00  6b 0b b4 6a a2 40 47 b4  |........k..j.@G.|
 3889         00008090  89 ab 1f e7 59 aa 57 2d  00 00 00 00 00 00 00 00  |....Y.W-........|
 3890     UUID >-------------------------------- ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
 3891                   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
 3892     
 3893     However writing a new UUID to the JFS also updates the version to 2 and
 3894     allows jfs_tune to report the UUID.
 3895     
 3896         $ jfs_tune -U random test_jfs.img
 3897         jfs_tune version 1.1.15, 04-Mar-2011
 3898         UUID updated successfully.
 3899     
 3900         $ blkid test_jfs.img
 3901         test_jfs.img: UUID="6374ec58-3568-4ffb-bea9-ff76bf5c192f" TYPE="jfs"
 3902     
 3903         $ jfs_tune -l test_jfs.img | egrep 'version|UUID'
 3904         jfs_tune version 1.1.15, 04-Mar-2011
 3905         JFS version:            2
 3906         File system UUID:       6374ec58-3568-4ffb-bea9-ff76bf5c192f
 3907         External log UUID:      00000000-0000-0000-0000-000000000000
 3908     
 3909         $ hexdump -C test_jfs.img
 3910         00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 3911         *
 3912         00008000  4a 46 53 31 02 00 00 00  58 f6 07 00 00 00 00 00  |JFS1....X.......|
 3913     Version >---------------- ^^ ^^ ^^ ^^
 3914     ...
 3915         00008080  00 00 00 00 00 00 00 00  63 74 ec 58 35 68 4f fb  |........ct.X5hO.|
 3916         00008090  be a9 ff 76 bf 5c 19 2f  00 00 00 00 00 00 00 00  |...v.\./........|
 3917     New UUID >---------------------------- ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
 3918                   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
 3919     
 3920     Therefore change the CreateAndReadUUID test for JFS to also write a new
 3921     UUID so that it also updates the version to 2, thus allowing jfs_tune to
 3922     report the UUID and the test pass.
 3923     
 3924     Note that GParted doesn't encounter this problem because it used blkid
 3925     by default to report the UUID and only falls back to using the file
 3926     system interface method which calls jfs_tune when blkid is not
 3927     available.
 3928     
 3929     Closes !49 - Add file system interface tests
 3930 
 3931 2019-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3932 
 3933     Accept reading shorter UUIDs from FAT16/32 file systems (!49)
 3934     
 3935     The tests were failing like this:
 3936     
 3937         $ ./test_SupportedFileSystems --gtest_filter='*CreateAndReadUUID/fat16'
 3938     ....
 3939         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16
 3940         test_SupportedFileSystems.cc:552: Failure
 3941         Expected equality of these values:
 3942           m_partition.uuid.size()
 3943             Which is: 9
 3944           36U
 3945             Which is: 36
 3946         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16, where GetParam() = 13 (45 ms)
 3947     
 3948     This is because the test was expecting a full 36 character UUID as used
 3949     by Linux file systems.  Also accept shorter 9 character "UUID"s as used
 3950     by FAT16/32 file systems.
 3951     
 3952     Closes !49 - Add file system interface tests
 3953 
 3954 2019-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 3955 
 3956     Create loop devices for NILFS2 read and write FS interface tests (!49)
 3957     
 3958     For NILFS2 the read and write tests which use nilfs-tune all fail using
 3959     an image file, even when run as root, however the other tests succeed.
 3960     Selected output from the test program:
 3961     
 3962         # ./test_SupportedFileSystems --gtest_filter='*/nilfs2' | fgrep ' ms'
 3963         [       OK ] My/SupportedFileSystemsTest.Create/nilfs2 (22 ms)
 3964         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2, where GetParam() = 22 (31 ms)
 3965         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/nilfs2, where GetParam() = 22 (30 ms)
 3966         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/nilfs2, where GetParam() = 22 (30 ms)
 3967         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteLabel/nilfs2, where GetParam() = 22 (37 ms)
 3968         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUID/nilfs2, where GetParam() = 22 (39 ms)
 3969         [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/nilfs2 (0 ms)
 3970         [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/nilfs2 (0 ms)
 3971         [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/nilfs2 (386 ms)
 3972         [       OK ] My/SupportedFileSystemsTest.CreateAndShrink/nilfs2 (345 ms)
 3973         [----------] 10 tests from My/SupportedFileSystemsTest (920 ms total)
 3974         [==========] 10 tests from 1 test case ran. (920 ms total)
 3975     
 3976     nilfs-tune fails like this when given an image file:
 3977         # truncate -s 256M test.img
 3978         # mkfs.nilfs2 test.img
 3979         mkfs.nilfs2 (nilfs-utils 2.2.7)
 3980         Start writing file system initial data to the device
 3981                Blocksize:4096  Device:test.img  Device Size:268435456
 3982         File system initialization succeeded !!
 3983         # nilfs-tune -l test.img
 3984         nilfs-tune 2.2.7
 3985         nilfs-tune: test.img: cannot open NILFS
 3986         # echo $?
 3987         1
 3988     
 3989     However using nilfs-tune via a loop device works:
 3990         # losetup --show --find /dev/loop0
 3991         /dev/loop0
 3992         # nilfs-tune -l /dev/loop0
 3993         nilfs-tune 2.2.7
 3994         Filesystem volume name:   (none)
 3995         Filesystem UUID:          fc49912c-4d39-4672-8610-1e1185d0db5f
 3996         Filesystem magic number:  0x3434
 3997         Filesystem revision #:    2.0
 3998         Filesystem features:      (none)
 3999         Filesystem state:         valid
 4000         Filesystem OS type:       Linux
 4001         Block size:               4096
 4002     ...
 4003     
 4004     So nilfs-tune only works with block devices.  Fix by making these tests
 4005     require a loop device and therefore make them root only.  Now these
 4006     tests are skipped as non-root user and pass as root.
 4007     
 4008     Closes !49 - Add file system interface tests
 4009 
 4010 2019-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4011 
 4012     Create loop devices for online resized file system tests (!49)
 4013     
 4014     File systems BTRFS, JFS, NILFS2 and XFS can only be resized while
 4015     mounted, but only root can mount file systems.  Therefore these tests
 4016     fail.  Also BTRFS resize uses 'btrfs filesystem show' to discover the
 4017     devid, which also fails as described in the previous commit message.
 4018     
 4019     Note that root can mount a file system image directly, but that it
 4020     implicitly creates loop device:
 4021         # truncate -s 256M test.img
 4022         # mkfs.xfs test.img
 4023         # mount test.img /mnt/1
 4024     
 4025         # fgrep /mnt/1 /proc/mounts
 4026         /dev/loop0 /mnt/1 xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
 4027         # losetup -a
 4028         /dev/loop0: [64768]:35826659 (/root/test.img)
 4029     
 4030     Therefore make these tests root only and require an explicit loop
 4031     device.  Now these file system resize tests succeed as root and are
 4032     skipped as non-root.
 4033     
 4034     Closes !49 - Add file system interface tests
 4035 
 4036 2019-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4037 
 4038     Create loop devices for BTRFS read file system interface tests (!49)
 4039     
 4040     For BTRFS the read (and resize) tests fail when using an image file,
 4041     however the create, write and check tests pass.  Selected output from
 4042     the test program:
 4043     
 4044         $ ./test_SupportedFileSystems --gtest_filter='*/btrfs' | fgrep ' ms'
 4045         [       OK ] My/SupportedFileSystemsTest.Create/btrfs (43 ms)
 4046         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs, where GetParam() = 7 (95 ms)
 4047         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs, where GetParam() = 7 (158 ms)
 4048         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/btrfs, where GetParam() = 7 (164 ms)
 4049         [       OK ] My/SupportedFileSystemsTest.CreateAndWriteLabel/btrfs (164 ms)
 4050         [       OK ] My/SupportedFileSystemsTest.CreateAndWriteUUID/btrfs (132 ms)
 4051         [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/btrfs (129 ms)
 4052         [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/btrfs (0 ms)
 4053         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/btrfs, where GetParam() = 7 (155 ms)
 4054         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndShrink/btrfs, where GetParam() = 7 (97 ms)
 4055         [----------] 10 tests from My/SupportedFileSystemsTest (1137 ms total)
 4056         [==========] 10 tests from 1 test case ran. (1137 ms total)
 4057     
 4058     The read operations fail because 'btrfs filesystem show' doesn't work on
 4059     am image file:
 4060         $ truncate -s 256M test.img
 4061         $ mkfs.btrfs test.img
 4062         btrfs-progs v4.9.1
 4063         See http://btrfs.wiki.kernel.org for more information.
 4064     
 4065         Label:              (null)
 4066         UUID:               de1624ae-39bb-4796-aee4-7ee1fa24c06a
 4067         Node side:          16384
 4068         Sector size:        4096
 4069         Filesystem size:    256.00MiB
 4070         Block group profiles:
 4071           Data:             single
 4072           Metadata:         DUP
 4073           System:           DUP
 4074         SSD detected:       no
 4075         Incompat features:  extref, skinny-metadata
 4076         Number of devices:  1
 4077         Devices:
 4078             ID       SIZE  PATH
 4079              1  256.00MiB  test.img
 4080         $ btrfs filesystem show test.img
 4081         ERROR: not a valid btrfs filesystem: /home/centos/programming/c/gparted/tests/test.img
 4082         $ echo $1
 4083         1
 4084     
 4085     Querying a BTRFS image file also fails as root:
 4086         $ su
 4087         Password:
 4088         # btrfs filesystem show test.img
 4089         ERROR: not a valid btrfs filesystem: /home/centos/programming/c/gparted/tests/test.img
 4090         # echo $1
 4091         1
 4092     
 4093     However querying the BTRFS via a loop device succeeds:
 4094         # losetup --show --find test.img
 4095         /dev/loop0
 4096         # btrfs filesystem show /dev/loop0
 4097         Label: none  uuid: de1624ae-39bb-4796-aee4-7ee1fa24c06a
 4098                 Total devices 1 FS bytes used 112.00KiB
 4099                 devid    1 size 256.00MiB used 88.00MiB path /root/test.img
 4100     
 4101     There must be some kernel level BTRFS file system device discovery
 4102     happening because now after creating a loop device for the image file,
 4103     the BTRFS can be shown via the image file directly:
 4104         # btrfs filesystem show test.img
 4105         Label: none  uuid: de1624ae-39bb-4796-aee4-7ee1fa24c06a
 4106                 Total devices 1 FS bytes used 112.00KiB
 4107                 devid    1 size 256.00MiB used 88.00MiB path /root/test.img
 4108     
 4109     Anyway for the BTRFS reading tests make them required a loop device and
 4110     therefore root only.  Now these tests are skipped as non-root user and
 4111     pass as root.
 4112     
 4113     Addressing BTRFS resizing test failures will be handled in a following
 4114     commit.
 4115     
 4116     Closes !49 - Add file system interface tests
 4117 
 4118 2019-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4119 
 4120     Create loop devices for LVM2 PV file system interface tests (!49)
 4121     
 4122     Creating an LVM2 PV as a non-root user on an image file fails like this:
 4123         $ truncate -s 256M test.img
 4124         $ lvm pvcreate `pwd`/test.img
 4125           WARNING: Running as a non-root user. Functionality may be unavailable.
 4126           /run/lvm/lvmetad.socket: access failed: Permission denied
 4127           WARNING: Failed to connect to lvmetad. Falling back to device scanning.
 4128           /run/lock/lvm/P_orphans:aux: open failed: Permission denied
 4129           Can't get lock for orphan PVs.
 4130         $ echo $?
 4131         5
 4132     
 4133     Trying the same as root also fails:
 4134         # truncate -s 256M test.img
 4135         # lvm pvcreate `pwd`/test.img
 4136           Device /root/test.img not found.
 4137         # echo $?
 4138         5
 4139     
 4140     LVM seems strongly predicated on only using block devices [1].  LVM can
 4141     use loop devices though, but loop devices can only be created by root.
 4142         # truncate -s 256M test.img
 4143         # losetup -f --show `pwd`/test.img
 4144         /dev/loop0
 4145         # lvm pvcreate /dev/loop0
 4146           Physical volume "/dev/loop0" successfully created.
 4147         # echo $?
 4148         0
 4149     
 4150     Make the LVM2 PV tests require user root and use loop device over the
 4151     test image.  Tests for the other file system types still directly uses
 4152     the image file.  This makes the LVM2 PV tests pass when run as root, or
 4153     successfully skipped when run as non-root.
 4154     
 4155     [1] lvmconfig --typeconfig default --withcomments --withspace | less
 4156         From the "devices" section of the commented default configuration,
 4157         LVM uses block devices found below /dev, devices provided by udev
 4158         and/or found in sysfs.
 4159     
 4160     Closes !49 - Add file system interface tests
 4161 
 4162 2019-10-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4163 
 4164     Prevent file system tests core dumping in GitLab CI Ubuntu image (!49)
 4165     
 4166     With the previous commit, execution of test_SupportedFileSystems is
 4167     failing in the GitLab CI Ubuntu image.  Fragment from file
 4168     tests/test-suite.log:
 4169     
 4170         FAIL: test_SupportedFileSystems
 4171         ===============================
 4172     
 4173         Terminate called after throwing an instance of 'Glib::ConvertError'
 4174         Aborted (core dumped)
 4175         FAIL test_SupportedFileSystems (exit status: 134)
 4176     
 4177     This core dump can be re-created locally by (1) removing modprobe from
 4178     the PATH, and (2) executing the test program in the C locale.
 4179     
 4180         $ LC_ALL=C ./test_SupportedFileSystems
 4181         Running main() from test_SupportedFileSystems.cc
 4182         terminate called after throwing an instance of 'Glib::ConvertError'
 4183         Aborted
 4184         $ echo $?
 4185         134
 4186     
 4187     Backtrace from gdb:
 4188         (gdb) backtrace
 4189         #0  0x00007f4f93002337 in __GI_raise (sig=sig@entry=6)
 4190             at ../nptl/sysdeps/unix/sysv/linux/raise.c:55
 4191         #1  0x00007f4f93003a28 in __GI_abort () at abort.c:90
 4192         #2  0x00007f4f93b2e7d5 in __gnu_cxx::__verbose_terminate_handler() ()
 4193             at ../../../../libstdc++-v3/libsupc++/vterminate.cc:95
 4194         #3  0x00007f4f93b2c746 in __cxxabiv1::__terminate(void (*)()) (handler=<optimized out>)
 4195             at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:38
 4196         #4  0x00007f4f93b2c773 in std::terminate() ()
 4197             at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48
 4198         #5  0x00007f4f93b2c993 in __cxxabiv1::__cxa_throw(void*, std::type_info*, void (*)(void*))
 4199             (obj=0x260d4b0, tinfo=0x7f4f966c1930 <typeinfo for Glib::ConvertError>, dest=0x7f4f96486fa0 <Glib::ConvertError::~ConvertError()>)
 4200             at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:87
 4201         #6  0x00007f4f96486e27 in Glib::ConvertError::throw_func(_GError*) (gobject=0x260bf90) at convert.cc:329
 4202         #7  0x00007f4f9649b5d7 in Glib::Error::throw_exception(_GError*) (gobject=0x260bf90) at error.cc:175
 4203         #8  0x00007f4f964a7155 in Glib::operator<<(std::ostream&, Glib::ustring const&)
 4204             (os=warning: RTTI symbol not found for class 'std::ostream' ..., utf8_string=...) at ustring.cc:1430
 4205         #9  0x000000000044d66f in GParted::Utils::execute_command(Glib::ustring const&, char const*, Glib::ustring&, Glib::ustring&, bool)
 4206             (command=..., input=input@entry=0x0, output=..., error=..., use_C_locale=use_C_locale@entry=true)
 4207             at ../src/Utils.cc:688
 4208         #10 0x000000000044dae9 in GParted::Utils::kernel_supports_fs(Glib::ustring const&)
 4209             (use_C_locale=true, error=..., output=..., command=...)
 4210             at ../src/Utils.cc:659
 4211         #11 0x000000000044dae9 in GParted::Utils::kernel_supports_fs(Glib::ustring const&) (fs=...)
 4212             at ../src/Utils.cc:480
 4213         #12 0x0000000000460008 in GParted::jfs::get_filesystem_support() (this=0x25e8e60)
 4214             at ../src/jfs.cc:59
 4215         #13 0x00000000004464f9 in GParted::SupportedFileSystems::find_supported_filesystems() (this=0x25e8690)
 4216             at ../src/SupportedFileSystems.cc:120
 4217         #14 0x0000000000412360 in GParted::SupportedFileSystemsTest::setup_supported_filesystems() ()
 4218             at test_SupportedFileSystems.cc:278
 4219         #15 0x00000000004151b0 in GParted::SupportedFileSystemsTest::get_supported_fstypes() ()
 4220             at test_SupportedFileSystems.cc:256
 4221         #16 0x00000000004152c0 in GParted::gtest_MySupportedFileSystemsTest_EvalGenerator_() ()
 4222             at test_SupportedFileSystems.cc:495
 4223         #17 0x000000000041c7d6 in testing::internal::ParameterizedTestCaseInfo<GParted::SupportedFileSystemsTest>::RegisterTests()
 4224             (this=0x2528ac0) at ../lib/gtest/include/gtest/internal/gtest-param-util.h:549
 4225         #18 0x0000000000479fb5 in testing::internal::UnitTestImpl::RegisterParameterizedTests() (this=0x25288d0)
 4226             at ./include/gtest/internal/gtest-param-util.h:709
 4227         #19 0x0000000000479fb5 in testing::internal::UnitTestImpl::RegisterParameterizedTests()
 4228             (this=this@entry=0x2528800) at ./src/gtest.cc:2658
 4229         #20 0x000000000048a001 in testing::internal::UnitTestImpl::PostFlagParsingInit() (this=0x2528800)
 4230             at ./src/gtest.cc:4980
 4231         #21 0x000000000049e399 in testing::internal::InitGoogleTestImpl<char>(int*, char**)
 4232             (argc=argc@entry=0x7ffe9d208a3c, argv=argv@entry=0x7ffe9d208b38) at ./src/gtest.cc:5934
 4233         #22 0x000000000048d285 in testing::InitGoogleTest(int*, char**)
 4234             (argc=argc@entry=0x7ffe9d208a3c, argv=argv@entry=0x7ffe9d208b38) at ./src/gtest.cc:5952
 4235         #23 0x0000000000410404 in main(int, char**) (argc=1, argv=0x7ffe9d208b38)
 4236             at test_SupportedFileSystems.cc:557
 4237     
 4238     The test program runs when executed in my locale and produces these
 4239     messages:
 4240     
 4241         $ ./test_SupportedFileSystems
 4242         Running main() from test_SupportedFileSystems.cc
 4243         Failed to execute child process “modprobe” (No such file or directory)
 4244         Failed to execute child process “modprobe” (No such file or directory)
 4245         [==========] Running 210 tests from 1 test case.
 4246     ...
 4247     
 4248     So the test program is aborting when trying to print the failed to
 4249     execute child process message, but only in the C locale.
 4250     
 4251     This doesn't affect the CentOS GitLab CI image because that installs the
 4252     kmod package with modprobe by default, however the Ubuntu image doesn't
 4253     have the kmod package.
 4254     
 4255     Fix this by explicitly installing the kmod package into both the CentOS
 4256     and Ubuntu GitLab CI images.
 4257     
 4258     Closes !49 - Add file system interface tests
 4259 
 4260 2019-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4261 
 4262     Extend tests to all fully supported file systems (!49)
 4263     
 4264     Extend testing to all fully supported file systems, those with an
 4265     implemented FileSystem derived class.
 4266     
 4267     Note that in main() GParted threading needs to now be initialised before
 4268     InitGoogleTest() because it calls INSTANTIATE_TEST_CASE_P() which in
 4269     turn calls get_supported_fstypes() which eventually constructs all the
 4270     individual file system interface objects and discovers available
 4271     support, some of which use execute_command().  Example call chain:
 4272         InitGoogleTest()
 4273           INSTANTIATE_TEST_CASE_P()
 4274             get_supported_fstypes()
 4275               setup_supported_filesystems()
 4276                 {SupportedFileSystems}->find_supported_filesystems()
 4277                   {btrfs}->get_filesystem_support()
 4278                     Utils::execute_command()
 4279     
 4280     In the CentOS 7 GitLab CI image the EPEL (Extra Packages for Enterprise
 4281     Linux) repository is added to provide f2fs-tools and ntfsprogs.
 4282     
 4283     23 of 210 tests fail on CentOS 7 and 22 on Ubuntu 18.04 LTS.  The
 4284     following commits will resolve these test failures.
 4285     
 4286         $ ./test_SupportedFileSystems
 4287         Running main() from test_SupportedFileSystems.cc
 4288         [==========] Running 210 tests from 1 test case.
 4289         [----------] Global test environment set-up.
 4290         [----------] 210 tests from My/SupportedFileSystemsTest
 4291     ...
 4292         [----------] 210 tests from My/SupportedFileSystemsTest (11066 ms total)
 4293     
 4294         [----------] Global test environment tear-down
 4295         [==========] 210 tests from 1 test case ran. (11067 ms total)
 4296         [  PASSED  ] 187 tests.
 4297         [  FAILED  ] 23 tests, listed below:
 4298         [  FAILED  ] My/SupportedFileSystemsTest.Create/lvm2pv, where GetParam() = 20
 4299         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs, where GetParam() = 7
 4300         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/jfs, where GetParam() = 17
 4301         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/lvm2pv, where GetParam() = 20
 4302         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/nilfs2, where GetParam() = 22
 4303         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUsage/ntfs, where GetParam() = 23
 4304         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs, where GetParam() = 7
 4305         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/nilfs2, where GetParam() = 22
 4306         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/btrfs, where GetParam() = 7
 4307         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16, where GetParam() = 13
 4308         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat32, where GetParam() = 14
 4309         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/jfs, where GetParam() = 17
 4310         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/nilfs2, where GetParam() = 22
 4311         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteLabel/nilfs2, where GetParam() = 22
 4312         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUID/nilfs2, where GetParam() = 22
 4313         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndCheck/lvm2pv, where GetParam() = 20
 4314         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndCheck/minix, where GetParam() = 21
 4315         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndRemove/lvm2pv, where GetParam() = 20
 4316         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/btrfs, where GetParam() = 7
 4317         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/lvm2pv, where GetParam() = 20
 4318         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndGrow/xfs, where GetParam() = 27
 4319         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndShrink/btrfs, where GetParam() = 7
 4320         [  FAILED  ] My/SupportedFileSystemsTest.CreateAndShrink/lvm2pv, where GetParam() = 20
 4321     
 4322         23 FAILED TESTS
 4323     
 4324     Closes !49 - Add file system interface tests
 4325 
 4326 2019-08-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4327 
 4328     Print file system types in parameterised test names (!49)
 4329     
 4330     Until now the parameterised test values are printed as part of the test
 4331     names as just 0, 1, etc. like this:
 4332     
 4333         $ ./test_SupportedFileSystems
 4334         Running main() from test_SupportedFileSystems.cc
 4335         [==========] Running 20 tests from 1 test case.
 4336         [----------] Global test environment set-up.
 4337         [----------] 20 tests from My/SupportedFileSystemsTest
 4338         [ RUN      ] My/SupportedFileSystemsTest.Create/0
 4339         [       OK ] My/SupportedFileSystemsTest.Create/0 (48 ms)
 4340         [ RUN      ] My/SupportedFileSystemsTest.Create/1
 4341         [       OK ] My/SupportedFileSystemsTest.Create/1 (11 ms)
 4342     
 4343     Provide the file system types as the names for the parameterised test
 4344     values [1].  Now the test names are printed like this:
 4345     
 4346         $ ./test_SupportedFileSystems
 4347         Running main() from test_SupportedFileSystems.cc
 4348         [==========] Running 20 tests from 1 test case.
 4349         [----------] Global test environment set-up.
 4350         [----------] 20 tests from My/SupportedFileSystemsTest
 4351         [ RUN      ] My/SupportedFileSystemsTest.Create/ext2
 4352         [       OK ] My/SupportedFileSystemsTest.Create/ext2 (51 ms)
 4353         [ RUN      ] My/SupportedFileSystemsTest.Create/linuxswap
 4354         [       OK ] My/SupportedFileSystemsTest.Create/linuxswap (11 ms)
 4355     
 4356     Also use these Google Test name friendly ASCII alphanumeric only names
 4357     everywhere the file system type needs to be reported in this test
 4358     program.
 4359     
 4360     [1] Specifying Names for Value-Parameterized Test Parameters
 4361         https://github.com/google/googletest/blob/v1.8.x/googletest/docs/advanced.md#specifying-names-for-value-parameterized-test-parameters
 4362     
 4363     Closes !49 - Add file system interface tests
 4364 
 4365 2019-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4366 
 4367     Add testing of linux-swap using Value-Parameterised Google Tests (!49)
 4368     
 4369     Use Google Test Value-Parameterised to call every test for both ext2
 4370     and linux-swap.
 4371         https://github.com/google/googletest/blob/v1.8.x/googletest/docs/advanced.md#value-parameterized-tests
 4372     
 4373     Running the test now looks like this:
 4374     
 4375         $ ./test_SupportedFileSystems
 4376         Running main() from test_SupportedFileSystems.cc
 4377         [==========] Running 20 tests from 1 test case.
 4378         [----------] Global test environment set-up.
 4379         [----------] 20 tests from My/SupportedFileSystemsTest
 4380         [ RUN      ] My/SupportedFileSystemsTest.Create/0
 4381         [       OK ] My/SupportedFileSystemsTest.Create/0 (97 ms)
 4382         [ RUN      ] My/SupportedFileSystemsTest.Create/1
 4383         [       OK ] My/SupportedFileSystemsTest.Create/1 (15 ms)
 4384         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/0
 4385         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/0 (106 ms)
 4386         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUsage/1
 4387         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUsage/1 (14 ms)
 4388         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/0
 4389         [       OK ] My/SupportedFileSystemsTest.CreateAndReadLabel/0 (95 ms)
 4390         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/1
 4391         [       OK ] My/SupportedFileSystemsTest.CreateAndReadLabel/1 (23 ms)
 4392         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/0
 4393         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUUID/0 (99 ms)
 4394         [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/1
 4395         [       OK ] My/SupportedFileSystemsTest.CreateAndReadUUID/1 (22 ms)
 4396         [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteLabel/0
 4397         [       OK ] My/SupportedFileSystemsTest.CreateAndWriteLabel/0 (102 ms)
 4398         [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteLabel/1
 4399         [       OK ] My/SupportedFileSystemsTest.CreateAndWriteLabel/1 (22 ms)
 4400         [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUID/0
 4401         [       OK ] My/SupportedFileSystemsTest.CreateAndWriteUUID/0 (101 ms)
 4402         [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUID/1
 4403         [       OK ] My/SupportedFileSystemsTest.CreateAndWriteUUID/1 (21 ms)
 4404         [ RUN      ] My/SupportedFileSystemsTest.CreateAndCheck/0
 4405         [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/0 (153 ms)
 4406         [ RUN      ] My/SupportedFileSystemsTest.CreateAndCheck/1
 4407         test_SupportedFileSystems.cc:424: Skip test.  check not supported or support not found
 4408         [       OK ] My/SupportedFileSystemsTest.CreateAndCheck/1 (0 ms)
 4409         [ RUN      ] My/SupportedFileSystemsTest.CreateAndRemove/0
 4410         test_SupportedFileSystems.cc:437: Skip test.  remove not supported or support not found
 4411         [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/0 (0 ms)
 4412         [ RUN      ] My/SupportedFileSystemsTest.CreateAndRemove/1
 4413         test_SupportedFileSystems.cc:437: Skip test.  remove not supported or support not found
 4414         [       OK ] My/SupportedFileSystemsTest.CreateAndRemove/1 (0 ms)
 4415         [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/0
 4416         [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/0 (266 ms)
 4417         [ RUN      ] My/SupportedFileSystemsTest.CreateAndGrow/1
 4418         [       OK ] My/SupportedFileSystemsTest.CreateAndGrow/1 (32 ms)
 4419         [ RUN      ] My/SupportedFileSystemsTest.CreateAndShrink/0
 4420         [       OK ] My/SupportedFileSystemsTest.CreateAndShrink/0 (111 ms)
 4421         [ RUN      ] My/SupportedFileSystemsTest.CreateAndShrink/1
 4422         [       OK ] My/SupportedFileSystemsTest.CreateAndShrink/1 (28 ms)
 4423         [----------] 20 tests from My/SupportedFileSystemsTest (1311 ms total)
 4424     
 4425         [----------] Global test environment tear-down
 4426         [==========] 20 tests from 1 test case ran. (1342 ms total)
 4427         [  PASSED  ] 20 tests.
 4428     
 4429     Closes !49 - Add file system interface tests
 4430 
 4431 2019-09-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4432 
 4433     Switch to testing ext2 interface via SupportedFilesystems class (!49)
 4434     
 4435     Replace directly using ext2 derived FileSystem interface class with
 4436     using the SupportedFileSystems class.  This is a step in getting ready
 4437     for testing all the GParted file system interface classes in one go.
 4438     
 4439     Closes !49 - Add file system interface tests
 4440 
 4441 2019-07-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4442 
 4443     Split FILESYSTEMS and FILESYSTEM_MAP into separate module (!49)
 4444     
 4445     GParted_Core::FILESYSTEMS and ::FILESYSTEM_MAP and the methods that
 4446     query and manipulate them are self-contained.  Therefore move them into
 4447     a separate SupportedFileSystems module.
 4448     
 4449     Also having a single class maintaining all FileSystem interface objects
 4450     will make testing all the file system types much easier as there will be
 4451     no need to duplicate this functionality in the test.
 4452     
 4453     Closes !49 - Add file system interface tests
 4454 
 4455 2019-07-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4456 
 4457     Add offline ext2 resizing tests (!49)
 4458     
 4459     Closes !49 - Add file system interface tests
 4460 
 4461 2019-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4462 
 4463     Add simple ext2 write tests: label, UUID, check and remove (!49)
 4464     
 4465     Closes !49 - Add file system interface tests
 4466 
 4467 2019-08-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4468 
 4469     Reload Partition object after FS creation in read tests (!49)
 4470     
 4471     Here are the errors reported in the deliberately broken
 4472     CreateAndReadLabel test from the previous commit message:
 4473     
 4474         [ RUN      ] ext2Test.CreateAndReadLabel
 4475         test_ext2.cc:311: Failure
 4476         Value of: m_partition.get_messages().empty()
 4477           Actual: false
 4478         Expected: true
 4479         Partition messages:
 4480         e2label: No such file or directory while trying to open /does_not_exist/test_ext2.img
 4481         Couldn't find valid filesystem superblock.
 4482     
 4483         [  FAILED  ] ext2Test.CreateAndReadLabel (77 ms)
 4484     
 4485     Even though the test was deliberately broken by setting the wrong path
 4486     for the file system image and the e2label command failed, apparently
 4487     testing for the expected label still passed.  What happened was that the
 4488     desired "TEST_LABEL" has to be in the Partition object and then the file
 4489     system was created.  Then reading the file system label failed, however
 4490     "TEST_LABEL" was already set in the Partition object so it matched.
 4491     Reading the label is unique among the read actions of usage, label and
 4492     UUID as the others don't need to be set before the file system is
 4493     created.  GParted doesn't encounter this issue because when refreshing
 4494     devices it creates new blank Partition objects and then performs the
 4495     read actions to populate them.
 4496     
 4497     Fix by resetting the Partition object back to only containing basic
 4498     information before all the reading file system information tests, even
 4499     though it is only needed in the read label case.  This also better
 4500     reflects how GParted works.
 4501     
 4502     Now with the same deliberate brokenness the test also reports the label
 4503     does not match it's expected value:
 4504     
 4505         $ ./test_ext2 --gtest_filter='ext2Test.CreateAndReadLabel'
 4506         Running main() from test_ext2.cc
 4507         Note: Google Test filter = ext2Test.CreateAndReadLabel
 4508         [==========] Running 1 test from 1 test case.
 4509         [----------] Global test environment set-up.
 4510         [----------] 1 test from ext2Test
 4511         [ RUN      ] ext2Test.CreateAndReadLabel
 4512         test_ext2.cc:322: Failure
 4513         Expected equality of these values:
 4514           fs_label
 4515             Which is: "TEST_LABEL"
 4516           m_partition.get_filesystem_label().c_str()
 4517             Which is: ""
 4518         test_ext2.cc:272: Failure
 4519         Value of: m_partition.get_messages().empty()
 4520           Actual: false
 4521         Expected: true
 4522         Partition messages:
 4523         e2label: No such file or directory while trying to open /does_not_exist/test_ext2.img
 4524         Couldn't find valid filesystem superblock.
 4525     
 4526         [  FAILED  ] ext2Test.CreateAndReadLabel (70 ms)
 4527         [----------] 1 test from ext2Test (70 ms total)
 4528     
 4529         [----------] Global test environment tear-down
 4530         [==========] 1 test from 1 test case ran. (75 ms total)
 4531         [  PASSED  ] 0 tests.
 4532         [  FAILED  ] 1 test, listed below:
 4533         [  FAILED  ] ext2Test.CreateAndReadLabel
 4534     
 4535          1 FAILED TEST
 4536     
 4537     Closes !49 - Add file system interface tests
 4538 
 4539 2019-07-26  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4540 
 4541     Add ext2 reading tests: usage, label and UUID (!49)
 4542     
 4543     The file system reading methods report errors into Partition messages
 4544     because they are used as part of the GParted refresh, rather than
 4545     reporting errors into OperationDetails used when applying operations.
 4546     Therefore test for no messages for success and print the messages on
 4547     failure.
 4548     
 4549     For example, temporarily breaking the read label test code by setting
 4550     the wrong file system image name produces this:
 4551     
 4552         $ ./test_ext2 --gtest_filter='ext2Test.CreateAndReadLabel'
 4553         Running main() from test_ext2.cc
 4554         Note: Google Test filter = ext2Test.CreateAndReadLabel
 4555         [==========] Running 1 test from 1 test case.
 4556         [----------] Global test environment set-up.
 4557         [----------] 1 test from ext2Test
 4558         [ RUN      ] ext2Test.CreateAndReadLabel
 4559         test_ext2.cc:311: Failure
 4560         Value of: m_partition.get_messages().empty()
 4561           Actual: false
 4562         Expected: true
 4563         Partition messages:
 4564         e2label: No such file or directory while trying to open /does_not_exist/test_ext2.img
 4565         Couldn't find valid filesystem superblock.
 4566     
 4567         [  FAILED  ] ext2Test.CreateAndReadLabel (77 ms)
 4568         [----------] 1 test from ext2Test (77 ms total)
 4569     
 4570         [----------] Global test environment tear-down
 4571         [==========] 1 test from 1 test case ran. (85 ms total)
 4572         [  PASSED  ] 0 tests.
 4573         [  FAILED  ] 1 test, listed below:
 4574         [  FAILED  ] ext2Test.CreateAndReadLabel
 4575     
 4576          1 FAILED TEST
 4577         $ echo $?
 4578         1
 4579     
 4580     Closes !49 - Add file system interface tests
 4581 
 4582 2019-10-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4583 
 4584     Strip XML markup from the printed operation details (!49)
 4585     
 4586     As seen in the first commit message, operation detail text is XML
 4587     encoded.  This makes it harder to read, especially commands which often
 4588     have single quotes encoded as &apos;.   For example:
 4589     
 4590         <b><i>mkfs.ext2 -F -L &apos;&apos; &apos;/home/centos/programming/c/gparted/tests/test_ext2.img&apos;</i></b>
 4591     
 4592     Strip this encoding when printing the operation details.  Now the same
 4593     example looks like:
 4594     
 4595         mkfs.ext2 -F -L '' '/home/centos/programming/c/gparted/tests/test_ext2.img'
 4596     
 4597     Closes !49 - Add file system interface tests
 4598 
 4599 2019-09-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4600 
 4601     Run test program under xvfb-run to satisfy need for an X11 display (!49)
 4602     
 4603     Running test_ext2 in GitLab Continuous Integration environment fails like
 4604     this:
 4605         (test_ext2:6338): Gtk-WARNING **: 09:06:17.576: cannot open display:
 4606         Running main() from test_ext2.cc
 4607     
 4608     Obviously the GitLab CI environment doesn't have an X11 display, but
 4609     unfortunately this test case code requires one.
 4610     Utils::execute_command() calls Gtk::Main::run() so requires a Gtk::Main
 4611     object constructing and therefore an X11 display, even though this
 4612     program never displays anything graphical.  The call chain is:
 4613         main()                       test_ext2.cc
 4614           Gtk::Main::Main()          gtkmm/gtk/src/main.ccg
 4615             Gtk::Main::init()        [1]
 4616               gtk_init()             gtk/gtk/gtkmain.c [2]
 4617     which exits with a non-zero exit status when the DISPLAY environment
 4618     variable is unset.
 4619     
 4620     Looked at deriving from Gtk::Main class and writing a replacement init()
 4621     method which calls gtk_init_check() instead of gtk_init() but
 4622     Gtk::Main::instance_ is a private member so not accessible in a derived
 4623     class.
 4624     
 4625     Tried using Glib::MainLoop instead of Gtk::Main, but that doesn't
 4626     initialise everything that Gtk::Main(), so the program crashes.
 4627     
 4628     Therefore use xvfb-run [3][4] to run this test program against a virtual
 4629     X11 display when a real display isn't available.  Coded execution of
 4630     xvfb-run into this test program so that it can simply be executed on the
 4631     command line like the other test programs, without having to remember to
 4632     run "xvfb-run ./test_ext2 ...".
 4633     
 4634     [1] Gtk::Main::init()
 4635         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.10.1/gtk/src/main.ccg#L287
 4636     [2] gtk_init()
 4637         https://gitlab.gnome.org/GNOME/gtk/blob/3.10.9/gtk/gtkmain.c#L1000
 4638     [3] how to run gtk app on linux without an x server
 4639         https://superuser.com/questions/624918/how-to-run-gtk-app-on-linux-without-an-x-server
 4640     [4] Using GTK without DISPLAY
 4641         https://stackoverflow.com/questions/11694278/using-gtk-without-display
 4642     
 4643     Closes !49 - Add file system interface tests
 4644 
 4645 2019-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4646 
 4647     Add initial create ext2 only FileSystem interface class test (!49)
 4648     
 4649     This is the first step of adding testing of the derived FileSystem
 4650     interface classes which call the file system specific executables.
 4651     Rather than mocking command execution and returned output the tests run
 4652     the real commands, effectively making this integration testing.
 4653     
 4654     Test case setup determines the file system supported actions using
 4655     get_filesystem_support() and individual tests are skipped if a feature
 4656     is not supported, just as GParted does for it's actions.
 4657     
 4658     Each test creates it's own sparse image file and a fresh file system,
 4659     performs a test on one FileSystem interface call and deletes the image
 4660     file.  This makes each test independent and allows them to run as a
 4661     non-root user, provided the file system command itself doesn't require
 4662     root.  Errors reported for a failed interface call will include the
 4663     GParted OperationDetails, which in turn includes the file system
 4664     specific command used and stdout and stderr from it's execution.
 4665     
 4666     For example, temporarily breaking the test code to create a 10 KiB image
 4667     file instead of 256 MiB one produces this:
 4668     
 4669         $ ./test_ext2
 4670         Running main() from test_ext2.cc
 4671         [==========] Running 1 test from 1 test case.
 4672         [----------] Global test environment set-up.
 4673         [----------] 1 test from ext2Test
 4674         [ RUN      ] ext2Test.Create
 4675         test_ext2.cc:199: Failure
 4676         Value of: s_ext2_obj->create(m_partition, m_operation_detail)
 4677           Actual: false
 4678         Expected: true
 4679         Operation details:
 4680         <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)
 4681         <i></i>
 4682         <i>mke2fs 1.42.9 (28-Dec-2013)
 4683         /home/centos/programming/c/gparted/tests/test_ext2.img: Not enough space to build proposed filesystem while setting up superblock
 4684         </i>
 4685     
 4686         [  FAILED  ] ext2Test.Create (25 ms)
 4687         [----------] 1 test from ext2Test (25 ms total)
 4688     
 4689         [----------] Global test environment tear-down
 4690         [==========] 1 test from 1 test case ran. (30 ms total)
 4691         [  PASSED  ] 0 tests.
 4692         [  FAILED  ] 1 test, listed below:
 4693         [  FAILED  ] ext2Test.Create
 4694     
 4695          1 FAILED TEST
 4696         $ echo $?
 4697         1
 4698     
 4699     Also as Utils:: and FileSystem::execute_command() are needed, this
 4700     requires linking with GParted_Core for GParted_Core::mainthread and
 4701     therefore with most of the non-UI classes in gpartedbin.
 4702     
 4703     Closes !49 - Add file system interface tests
 4704 
 4705 2019-06-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4706 
 4707     Rename enumeration to MENU_LABEL_FILESYSTEM
 4708     
 4709     To match the renaming performed as part of Bug 741424 "Add support for
 4710     GPT partition names".  In particular this is most closely similar to:
 4711         d480800600be714a0e706b51a147d329d8280e52
 4712         Rename enum to OPERATION_LABEL_FILESYSTEM (#741424)
 4713 
 4714 2019-09-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4715 
 4716     Print OS details in the GitLab CI (!48)
 4717     
 4718     Just a simple debugging aid to have the OS details printed in the GitLab
 4719     CI output.
 4720     
 4721     Closes !48 - Remain with CentOS 7 for GitLab CI
 4722 
 4723 2019-09-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4724 
 4725     Remain with CentOS 7 for GitLab CI (!48)
 4726     
 4727     When GParted GitLab Continuous Integration was setup, CentOS 7 image was
 4728     used for a slow moving distribution and Ubuntu as a different, faster
 4729     moving distribution.
 4730     
 4731     CentOS 8 has recently been released [1].  To avoid automatically
 4732     switching to it when an official CentOS 8 docker image is made available
 4733     [2], explicitly specify the CentOS 7 image.
 4734     
 4735     [1] Release for CentOS Linux 8 and CentOS Streams (2019-09-24)
 4736         https://lists.centos.org/pipermail/centos-announce/2019-September/023449.html
 4737     
 4738     [2] Docker Official Images, The official build of CentOS
 4739         https://hub.docker.com/_/centos/
 4740     
 4741     Closes !48 - Remain with CentOS 7 for GitLab CI
 4742 
 4743 2019-10-02  Marek Černocký <marek.cernocky@advantech.com>
 4744 
 4745     Updated Czech help translation
 4746 
 4747 2019-10-02  Marek Černocký <marek@manet.cz>
 4748 
 4749     Updated Czech translation
 4750 
 4751 2019-09-19  Jordi Mas <jmas@softcatala.org>
 4752 
 4753     Update Catalan translation
 4754 
 4755 2019-08-22  Anders Jonsson <anders.jonsson@norsjovallen.se>
 4756 
 4757     Update Swedish translation
 4758 
 4759 2019-08-13  Jordi Mas <jmas@softcatala.org>
 4760 
 4761     Update Catalan translation
 4762 
 4763 2019-08-13  Asier Sarasua Garmendia <asier.sarasua@gmail.com>
 4764 
 4765     Update Basque translation
 4766 
 4767 2019-08-11  Daniel Șerbănescu <daniel@serbanescu.dk>
 4768 
 4769     Update Romanian translation
 4770 
 4771 2019-07-22  Mathias L. Baumann <github@supradigital.org>
 4772 
 4773     Fix invalid substitution in de.po (!47)
 4774     
 4775     Fixes the error:
 4776       (gpartedbin:995): glibmm-WARNING **: 09:11:54.522: invalid
 4777       substitution "%2" in fmt string "%2 Operationen stehen momentan aus."
 4778     
 4779     Closes !47 - Fix invalid substitution in de.po
 4780 
 4781 2019-06-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4782 
 4783     Erase correct key in unit test PasswordRAMStoreTest.TooLongPassword
 4784     
 4785     Was attempting to erase the wrong key "key-long" for the test.  It
 4786     should be erasing "key-too-long".  Fix this.  Given that that line in
 4787     the test was to erase a non-existent key and confirm failure; the test
 4788     passed before with the wrong non-existent key, and still passes with the
 4789     right non-existent key.  Clearly a cut and paste error as a result of
 4790     copying the previous LongPassword test when initially added in:
 4791         c6657aab9efe8cefece2017bee4bef9ece607e73
 4792         Add unit tests for PasswordRAMStore module (#795617)
 4793 
 4794 2019-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4795 
 4796     Drop use of long ago removed udevsettle
 4797     
 4798     Separate udevsettle command was merged into udevadm back in udev 117
 4799     (released 2007-11-13) by:
 4800         https://github.com/systemd/systemd/commit/225cb03bd851adc6d269b13bdf2b1bfded2b96b9
 4801         udevadm: merge all udev tools into a single binary
 4802     
 4803     The oldest supported distributions have these much newer versions of
 4804     udev:
 4805       Distro             EOL        udevadm -V
 4806       Debian 8           2020-Apr   215 (combined systemd and udev)
 4807       RHEL / CentOS 7    2024-Jun   219 (combined systemd and udev)
 4808       Ubuntu 16.04 LTS   2021-Apr   229 (combined systemd and udev)
 4809 
 4810 2019-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4811 
 4812     Order internally detected signatures by increasing offset (!46)(#16)
 4813     
 4814     Along with the previous patch "Avoid reading the same sector multiple
 4815     times in a row (!46)(#16)" internal detection of file system signatures
 4816     now reads the minimum number of sectors in increasing order.
 4817     
 4818     As the code still considers the sector size, it now also reads less
 4819     sectors from devices with larger sectors to get all the signatures.  So
 4820     on a 512 byte sector device it maximally seeks to and reads from these
 4821     byte offsets:
 4822         0, 512, 1024, 65536
 4823     and on a 4096 byte sector device, only from these byte offsets:
 4824         0, 65536
 4825     
 4826     Closes !46 - Whole device FAT32 file system reports device busy warning
 4827                  from mlabel
 4828     Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
 4829                  drives
 4830 
 4831 2019-07-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4832 
 4833     Avoid reading the same sector multiple times in a row (!46)(#16)
 4834     
 4835     GParted internal file system detection is reading the same sector
 4836     multiple times in a row.  Add an optimisation to only read a sector if
 4837     it is different to the previously read sector.
 4838     
 4839     Closes !46 - Whole device FAT32 file system reports device busy warning
 4840                  from mlabel
 4841     Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
 4842                  drives
 4843 
 4844 2019-07-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4845 
 4846     Just pass sector size to detect_filesystem_internal() (!46)(#16)
 4847     
 4848     After the previous commit the lp_device structure pointer parameter is
 4849     only used to provide sector_size.  Just pass that instead.
 4850     
 4851     Closes !46 - Whole device FAT32 file system reports device busy warning
 4852                  from mlabel
 4853     Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
 4854                  drives
 4855 
 4856 2019-07-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4857 
 4858     Switch to POSIX open() in detect_filesystem_internal() (!46)(#16)
 4859     
 4860     For every partitioned device that GParted scans it triggers a set of
 4861     udev change events from it's internal file system signature detection
 4862     function.  This is the sequence of events:
 4863     
 4864       gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
 4865       gparted    |  ped_device_get("/dev/sdb")
 4866       libparted  |      open("/dev/sdb", O_RDONLY) = 8
 4867       libparted  |      close(8)
 4868       gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
 4869       gparted    |    open("/dev/sdb", O_RDONLY|O_NONBLOCK) = 8
 4870       gparted    |    read(8, ...)
 4871       gparted    |    close(8)
 4872       gparted    |  set_device_from_disk(device, device_path="/dev/sdb")
 4873       gparted    |    get_device(device_path="/dev/sdb", ..., flush=true)
 4874       gparted    |      ped_device_get()
 4875       gparted    |      flush_device(lp_device)  lp_device->path="/dev/sdb"
 4876       gparted    |        ped_device_open()
 4877       libparted  |          open("/dev/sdb", O_RDWR) = 8
 4878       gparted    |        ped_device_sync()
 4879       gparted    |        ped_device_close()
 4880       libparted  |          close(8)
 4881       udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
 4882       udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
 4883       udev(async)|            KERNEL change /devices/.../sdb (block)
 4884       udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
 4885       udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
 4886       udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
 4887       udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
 4888       udev(async)|            UDEV   change /devices/.../sdb (block)
 4889       udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
 4890       udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
 4891       gparted    |        settle_device()
 4892       gparted    |          Utils::execute_command("udevadm settle --timeout=1")
 4893       gparted    |    detect_filesystem(lp_device, NULL, ...)  lp_device->path="/dev/sdb"
 4894       gparted    |      detect_filesystem_internal(lp_device, NULL)  lp_device->path="/dev/sdb"
 4895       gparted    |        ped_device_open()
 4896       libparted  |          open("/dev/sdb", O_RDWR) = 8
 4897       gparted    |        ped_device_read()
 4898       gparted    |        ped_device_read()
 4899       gparted    |        ped_device_read()
 4900       gparted    |        ped_device_read()
 4901       gparted    |        ped_device_read()
 4902       gparted    |        ped_device_read()
 4903       gparted    |        ped_device_read()
 4904       gparted    |        ped_device_read()
 4905       gparted    |        ped_device_read()
 4906       gparted    |        ped_device_read()
 4907       gparted    |        ped_device_read()
 4908       gparted    |        ped_device_read()
 4909       gparted    |        ped_device_read()
 4910       gparted    |        ped_device_close()
 4911       libparted  |          close(8)
 4912       udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
 4913       udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
 4914       udev(async)|            KERNEL change /devices/.../sdb (block)
 4915       udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
 4916       udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
 4917       udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
 4918       udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
 4919       udev(async)|            UDEV   change /devices/.../sdb (block)
 4920       udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
 4921       udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
 4922       gparted    |    get_disk(lp_device, lp_disk, strict=false)
 4923       gparted    |      ped_disk_new(lp_device)  lp_device->path="/dev/sdb"
 4924       libparted  |        open("/dev/sdb", O_RDWR) = 8
 4925       libparted  |        close(8)
 4926       udev(async)|          KERNEL remove /devices/.../sdb/sdb1 (block)
 4927       udev(async)|          KERNEL remove /devices/.../sdb/sdb2 (block)
 4928       udev(async)|          KERNEL change /devices/.../sdb (block)
 4929       udev(async)|          KERNEL add    /devices/.../sdb/sdb1 (block)
 4930       udev(async)|          KERNEL add    /devices/.../sdb/sdb2 (block)
 4931       udev(async)|          UDEV   remove /devices/.../sdb/sdb1 (block)
 4932       udev(async)|          UDEV   remove /devices/.../sdb/sdb2 (block)
 4933       udev(async)|          UDEV   change /devices/.../sdb (block)
 4934       udev(async)|          UDEV   add    /devices/.../sdb/sdb1 (block)
 4935       udev(async)|          UDEV   add    /devices/.../sdb/sdb2 (block)
 4936       gparted    |      settle_device()
 4937       gparted    |        Utils::execute_command("udevadm settle --timeout=1")
 4938       gparted    |    set_device_partitions()
 4939       gparted    |      detect_filesystem()
 4940       gparted    |      set_partition_label_and_uuid(partition)  partition.get_path()="/dev/sdb1"
 4941       gparted    |        read_label()
 4942       gparted    |          ext2::read_label()
 4943       gparted    |            Utils::execute_command("e2label /dev/sdb1")
 4944     
 4945     Note that the udev block device change events triggered in
 4946     detect_filesystem_internal() occur before the waited for ones in the
 4947     second commit "Wait for udev to recreate /dev/PTN entries when querying
 4948     partition FSs (!46)" in get_disk() so these were already waited for.
 4949     
 4950     The call chain is:
 4951         set_devices_thread()
 4952             set_device_from_disk()
 4953                 detect_filesystem()
 4954                     detect_filesystem_internal()
 4955                         ped_device_open()
 4956                         ped_device_read()
 4957                         ped_device_close()
 4958     
 4959     This occurs because file system detection is performed on whole disk
 4960     devices, but the device contains a partition table, so blkid won't
 4961     report any content GParted accepts as a file system, so it tries it's
 4962     own internal detection.
 4963     
 4964     Fix this by changing detect_filesystem_internal() to use POSIX open(),
 4965     read() and close() so the file can be opened read-only and udev change
 4966     events aren't triggered.
 4967     
 4968     Note that when using detect_filesystem_internal() on a partition this
 4969     also changes the device it reads from.  Before it used libparted which
 4970     always reads from the whole disk device, now it reads from the partition
 4971     device.  This doesn't matter because GParted ensures the data is
 4972     consistent between them [2] and blkid reads from each partition device
 4973     which GParted already uses.
 4974     
 4975     As the new code avoids using the libparted API, and just skips to the
 4976     next signature on lseek() and read() errors, it therefore won't generate
 4977     libparted exceptions such as this when scanning very small drives:
 4978         Invalid argument during seek for read on /dev/PTN
 4979     
 4980     [1] f8faee637787329c07771e495c9b26abc9ac1603
 4981         Avoid whole disk FAT being detected as MSDOS partition table
 4982         (#743181)
 4983     
 4984     [2] 3bea067596e3e2d6513cda2a66df1b3e4fa432fb
 4985         Flush devices when scanning to prevent reading stale signatures
 4986         (#723842)
 4987     
 4988     Closes !46 - Whole device FAT32 file system reports device busy warning
 4989                  from mlabel
 4990     Closes #16 - "invalid argument for seek()" error on very small (<=40KiB)
 4991                  drives
 4992 
 4993 2019-07-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 4994 
 4995     Pass unmodified parameter to useable_device() as const (!46)
 4996     
 4997     GParted_Core::useable_device() doesn't change the pointed to PedDevice
 4998     structure.  Pass it as const so the compiler enforces this.
 4999     
 5000     Closes !46 - Whole device FAT32 file system reports device busy warning
 5001                  from mlabel
 5002 
 5003 2019-07-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5004 
 5005     Switch to POSIX open() in useable_device() (!46)
 5006     
 5007     For every device that GParted scans, it determines if it can be used by
 5008     attempting to read the first sector.  This is the sequence of events,
 5009     as reported in the previous two commit messages:
 5010     
 5011       gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
 5012       ...
 5013       gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
 5014       gparted    |    ped_device_open()
 5015       libparted  |      open("/dev/sdb", O_RDWR) = 8
 5016       gparted    |    ped_device_read()
 5017       gparted    |    ped_device_close()
 5018       libparted  |      close(8)
 5019       udev(async)|        KERNEL change /devices/.../sdb (block)
 5020       ...
 5021       udev(async)|        UDEV   change /devices/.../sdb (block)
 5022     
 5023     Note that these udev block device change events occur before the ones
 5024     waited for in the first commit "Wait for udev change on /dev/DISK when
 5025     querying whole device FS (!46)" so these were already waited for.
 5026     
 5027     So because libparted only opens devices read-write this triggers a set
 5028     of udev change events for the whole block device, and if the device is
 5029     partitioned, also remove and re-add events for all the partitions.
 5030     
 5031     Switch to using POSIX open(), read() and close() calls so read-only
 5032     access can be specified to avoid the unnecessary udev change events.
 5033     
 5034     Closes !46 - Whole device FAT32 file system reports device busy warning
 5035                  from mlabel
 5036 
 5037 2019-07-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5038 
 5039     Wait for udev to recreate /dev/PTN entries when querying partition FSs (!46)
 5040     
 5041     After the previous fix, on my CentOS 7 VM, GParted is now often
 5042     reporting a warning that the /dev/PTN entry is missing when reading the
 5043     label of the file system in the first partition.  This happens
 5044     regardless of the file system type.
 5045     
 5046     Example error for EXT4:
 5047         e2label: No such file or directory while trying to open /dev/sdb1
 5048         Couldn't find valid file system superblock.
 5049     
 5050     Example error for XFS:
 5051         /dev/sdb1: No such file or directory
 5052         fatal error -- couldn't initialize XFS library
 5053     
 5054     As with the case in the previous commit, GParted gets the label via
 5055     blkid instead.
 5056     
 5057     Again with debugging and sleeping in GParted, stracing the GParted
 5058     thread GParted_Core::set_devices_thread() and using 'udevadm monitor' to
 5059     watch udev events the following sequence of events is observed:
 5060     
 5061       gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
 5062       gparted    |  ped_device_get("/dev/sdb")
 5063       libparted  |      open("/dev/sdb", O_RDONLY) = 8
 5064       libparted  |      close(8)
 5065       gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
 5066       gparted    |    ped_device_open()
 5067       libparted  |      open("/dev/sdb", O_RDWR) = 8
 5068       gparted    |    ped_device_read()
 5069       gparted    |    ped_device_close()
 5070       libparted  |      close(8)
 5071       udev(async)|        KERNEL remove /devices/.../sdb/sdb1 (block)
 5072       udev(async)|        KERNEL remove /devices/.../sdb/sdb2 (block)
 5073       udev(async)|        KERNEL change /devices/.../sdb (block)
 5074       udev(async)|        KERNEL add    /devices/.../sdb/sdb1 (block)
 5075       udev(async)|        KERNEL add    /devices/.../sdb/sdb2 (block)
 5076       udev(async)|        UDEV   remove /devices/.../sdb/sdb1 (block)
 5077       udev(async)|        UDEV   remove /devices/.../sdb/sdb2 (block)
 5078       udev(async)|        UDEV   change /devices/.../sdb (block)
 5079       udev(async)|        UDEV   add    /devices/.../sdb/sdb1 (block)
 5080       udev(async)|        UDEV   add    /devices/.../sdb/sdb2 (block)
 5081       gparted    |  set_device_from_disk(device, device_path="/dev/sdb")
 5082       gparted    |    get_device(device_path="/dev/sdb", ..., flush=true)
 5083       gparted    |      ped_device_get()
 5084       gparted    |      flush_device(lp_device)  lp_device->path="/dev/sdb"
 5085       gparted    |        ped_device_open()
 5086       libparted  |          open("/dev/sdb", O_RDWR) = 8
 5087       gparted    |        ped_device_sync()
 5088       gparted    |        ped_device_close()
 5089       libparted  |          close(8)
 5090       udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
 5091       udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
 5092       udev(async)|            KERNEL change /devices/.../sdb (block)
 5093       udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
 5094       udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
 5095       udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
 5096       udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
 5097       udev(async)|            UDEV   change /devices/.../sdb (block)
 5098       udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
 5099       udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
 5100       gparted    |        settle_device()
 5101       gparted    |          Utils::execute_command("udevadm settle --timeout=1")
 5102       gparted    |    detect_filesystem(lp_device, NULL, ...)  lp_device->path="/dev/sdb"
 5103       gparted    |      detect_filesystem_internal(lp_device, NULL)  lp_device->path="/dev/sdb"
 5104       gparted    |        ped_device_open()
 5105       libparted  |          open("/dev/sdb", O_RDWR) = 8
 5106       gparted    |        ped_device_read()
 5107       gparted    |        ped_device_read()
 5108       gparted    |        ped_device_read()
 5109       gparted    |        ped_device_read()
 5110       gparted    |        ped_device_read()
 5111       gparted    |        ped_device_read()
 5112       gparted    |        ped_device_read()
 5113       gparted    |        ped_device_read()
 5114       gparted    |        ped_device_read()
 5115       gparted    |        ped_device_read()
 5116       gparted    |        ped_device_read()
 5117       gparted    |        ped_device_read()
 5118       gparted    |        ped_device_read()
 5119       gparted    |        ped_device_close()
 5120       libparted  |          close(8)
 5121       udev(async)|            KERNEL remove /devices/.../sdb/sdb1 (block)
 5122       udev(async)|            KERNEL remove /devices/.../sdb/sdb2 (block)
 5123       udev(async)|            KERNEL change /devices/.../sdb (block)
 5124       udev(async)|            KERNEL add    /devices/.../sdb/sdb1 (block)
 5125       udev(async)|            KERNEL add    /devices/.../sdb/sdb2 (block)
 5126       udev(async)|            UDEV   remove /devices/.../sdb/sdb1 (block)
 5127       udev(async)|            UDEV   remove /devices/.../sdb/sdb2 (block)
 5128       udev(async)|            UDEV   change /devices/.../sdb (block)
 5129       udev(async)|            UDEV   add    /devices/.../sdb/sdb1 (block)
 5130       udev(async)|            UDEV   add    /devices/.../sdb/sdb2 (block)
 5131       gparted    |    get_disk(lp_device, lp_disk, strict=false)
 5132       gparted    |      ped_disk_new(lp_device)  lp_device->path="/dev/sdb"
 5133       libparted  |        open("/dev/sdb", O_RDWR) = 8
 5134       libparted  |        close(8)
 5135       udev(async)|          KERNEL remove /devices/.../sdb/sdb1 (block)
 5136       udev(async)|          KERNEL remove /devices/.../sdb/sdb2 (block)
 5137       udev(async)|          KERNEL change /devices/.../sdb (block)
 5138       udev(async)|          KERNEL add    /devices/.../sdb/sdb1 (block)
 5139       udev(async)|          KERNEL add    /devices/.../sdb/sdb2 (block)
 5140       udev(async)|          UDEV   remove /devices/.../sdb/sdb1 (block)
 5141       udev(async)|          UDEV   remove /devices/.../sdb/sdb2 (block)
 5142       udev(async)|          UDEV   change /devices/.../sdb (block)
 5143       udev(async)|          UDEV   add    /devices/.../sdb/sdb1 (block)
 5144       udev(async)|          UDEV   add    /devices/.../sdb/sdb2 (block)
 5145       gparted    |    set_device_partitions()
 5146       gparted    |      detect_filesystem()
 5147       gparted    |      set_partition_label_and_uuid(partition)  partition.get_path()="/dev/sdb1"
 5148       gparted    |        read_label()
 5149       gparted    |          ext2::read_label()
 5150       gparted    |            Utils::execute_command("e2label /dev/sdb1")
 5151     
 5152     So in this case for a partitioned drive, libparted ped_disk_new() is
 5153     opening and closing the device read-write and triggering the udev remove
 5154     and add partition block special entries exactly when the label is trying
 5155     to be read from the first partition, causing the device missing error.
 5156     The call chain is:
 5157         set_devices_thread()
 5158             set_device_from_disk()
 5159                 get_disk()
 5160                     ped_disk_new()
 5161     
 5162     Looking at the source for ped_disk_new() [1] it is calling
 5163     ped_device_open() and ped_device_close(), hence why it is opening the
 5164     device read-write and triggering the udev events.
 5165     
 5166     Looking back at commit "Wait for udev to recreate /dev/PTN entries when
 5167     calibrating (#762941)" [2] and re-testing it, the udev events were also
 5168     caused by ped_disk_new() with this call chain:
 5169         apply_operation_to_disk()
 5170             calibrate_partition()
 5171                 get_disk()
 5172                     ped_disk_new()
 5173     
 5174     Fix this probe case and keep the fix for the previous calibrate case by
 5175     moving the waiting for udev events from calibrate_partition() into
 5176     get_disk(), right after ped_disk_new().  The maximum wait time is
 5177     shortened to the shorter 1 second probing timeout to avoid the longer
 5178     10 second apply timeout in this probing case.  The calibrate case commit
 5179     message said "The longest I have seen udev take to do this is 0.80
 5180     seconds in a VM".
 5181     
 5182     [1] parted/libparted/disk.c:ped_disk_new()
 5183         http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/disk.c?id=v3.2#n169
 5184     
 5185     [2] fd9013d5f6971e9282f019903d6e148e367718bf
 5186         Wait for udev to recreate /dev/PTN entries when calibrating
 5187         (#762941)
 5188     
 5189     Closes !46 - Whole device FAT32 file system reports device busy warning
 5190                  from mlabel
 5191 
 5192 2019-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5193 
 5194     Wait for udev change on /dev/DISK when querying whole device FS (!46)
 5195     
 5196     GParted nearly always shows this warning against a whole disk device
 5197     FAT32 file system on my development VMs:
 5198         plain floppy: device "/dev/sdb" busy (Resource temporarily
 5199         unavailable): Cannot initialize '::'
 5200         mlabel: Cannot initialize drive
 5201     However GParted does get the label via blkid instead.  Occasionally
 5202     everything works correctly and there is no warning.
 5203     
 5204     Never found a similar error for any other file system on a whole disk
 5205     device.  The timing never seems to clash.
 5206     
 5207     Remember that when a writable file descriptor of a disk device is
 5208     closed, udev events are triggered which update the kernel and /dev
 5209     entries for any partition changes.  (This is in addition to coding which
 5210     has always existed in the partitioning tools, including fdisk and
 5211     parted, to inform the kernel, but not create /dev entries, of partition
 5212     changes).
 5213     
 5214     With debugging and sleeping in GParted, stracing the GParted thread
 5215     GParted_Core::set_devices_thread() and using 'udevadm monitor' to watch
 5216     udev events the following sequence of events is observed:
 5217     
 5218       gparted    |set_devices_thread(pdevices)  pdevices->["/dev/sdb"]
 5219       gparted    |  ped_device_get("/dev/sdb")
 5220       libparted  |      open("/dev/sdb", O_RDONLY) = 8
 5221       libparted  |      close(8)
 5222       gparted    |  useable_device(lp_device)  lp_device->path="/dev/sdb"
 5223       gparted    |    ped_device_open()
 5224       libparted  |      open("/dev/sdb", O_RDWR) = 8
 5225       gparted    |    ped_device_read()
 5226       gparted    |    ped_device_close()
 5227       libparted  |      close(8)
 5228       udev(async)|        KERNEL change /devices/.../sdb (block)
 5229       udev(async)|        KERNEL change /devices/.../sdb (block)
 5230       udev(async)|        UDEV   change /devices/.../sdb (block)
 5231       udev(async)|        UDEV   change /devices/.../sdb (block)
 5232       gparted    |  set_device_from_disk(device, device_path="/dev/sdb")
 5233       gparted    |    get_device(device_path="/dev/sdb", ..., flush=true)
 5234       gparted    |      ped_device_get()
 5235       gparted    |      flush_device(lp_device)  lp_device->path="/dev/sdb"
 5236       gparted    |        ped_device_open()
 5237       libparted  |          open("/dev/sdb", O_RDWR) = 8
 5238       gparted    |        ped_device_sync()
 5239       gparted    |        ped_device_close()
 5240       libparted  |          close(8)
 5241       udev(async)|            KERNEL change /devices/.../sdb (block)
 5242       udev(async)|            KERNEL change /devices/.../sdb (block)
 5243       udev(async)|            UDEV   change /devices/.../sdb (block)
 5244       udev(async)|            UDEV   change /devices/.../sdb (block)
 5245       gparted    |    set_device_one_partition()
 5246       gparted    |      set_partition_label_and_uuid()
 5247       gparted    |        read_label()
 5248       gparted    |          fat16::read_label()
 5249       gparted    |            Utils::execute_command("mlabel -s :: -i /dev/sdb")
 5250     
 5251     This sequence of events only shows which close()s by libparted trigger
 5252     udev events.  It does not show that processing those events are
 5253     asynchronous and overlap with GParted executing mlabel, causing the
 5254     device busy error.
 5255     
 5256     As libparted's ped_device_open() doesn't offer a way to specify that a
 5257     device will only be used for reading, it always opens it read-write
 5258     [1][2].  Hence this sequence in GParted_Core::flush_device():
 5259         ped_device_open()
 5260         ped_device_sync()
 5261         ped_device_close()
 5262     always triggers udev change events on the whole disk device.  Fix by
 5263     waiting for those udev events to complete.
 5264     
 5265     [1] libparted documentation, PedDevice, ped_device_open()
 5266         https://www.gnu.org/software/parted/api/group__PedDevice.html#ga7c87bd06e76553c8ff3262b5e6ca256
 5267     
 5268     [2] parted/libparted/arch/linux.c:linux_open()
 5269         http://git.savannah.gnu.org/cgit/parted.git/tree/libparted/arch/linux.c?id=v3.2#n1628
 5270     
 5271     Closes !46 - Whole device FAT32 file system reports device busy warning
 5272                  from mlabel
 5273 
 5274 2019-07-18  Rafael Fontenelle <rafaelff@gnome.org>
 5275 
 5276     Update Brazilian Portuguese translation
 5277 
 5278 2019-04-01  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5279 
 5280     Drop use of long ago removed udevinfo
 5281     
 5282     The last distribution to include the separate 'udevinfo' command was
 5283     RHEL / CentOS 5 with udev 095.  All supported distributions have much
 5284     newer versions of udev and instead have the 'udevadm' command.
 5285 
 5286 2019-06-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5287 
 5288     Switch to faster minfo and mdir to read FAT16/32 usage (#569921)
 5289     
 5290     A user reported that GParted was slow to refresh on FAT32 file systems:
 5291     "can take very long, up to several minutes; can be reproduced by running
 5292     dosfsck manually".  This is because the file system was large and almost
 5293     full, and GParted performs a file system check just to to report the
 5294     file system usage.
 5295     
 5296     Created a 4 GiB FAT32 file system and almost filled it with 4 KiB files,
 5297     just over 970,000 files.
 5298     
 5299         # df -k /mnt/2
 5300         Filesystem     1K-blocks     Used Available Used% Mounted on
 5301         /dev/sdb2        4186108 39155384    270724   94% /mnt/2
 5302         # df -i /mnt/2
 5303         Filesystem     Inodes IUsed IFree IUse% Mounted on
 5304         /dev/sdb2           0     0     0     - /mnt/2
 5305         # find /mnt/2 -type f -print | wc -l
 5306         971059
 5307         # find /mnt/2 -type d -print | wc -l
 5308         1949
 5309     
 5310     Testing performance of the current fsck.fat:
 5311     
 5312         # time fsck.fat -n -v /dev/sdb2 | \
 5313         > egrep 'bytes per logical sector|bytes per cluster|sectors total|clusters$'
 5314                512 bytes per logical sector
 5315               4096 bytes per cluster
 5316            8388608 sectors total
 5317         /dev/sdb2: 973008 files, 978846/1046527 clusters
 5318     
 5319         real    0m11.552s
 5320         user    0m2.183s
 5321         sys     0m7.547s
 5322     
 5323     Free sectors in the file system according to fsck.fat:
 5324         (1046527 - 978846) * 4096 / 512 = 541448 sectors
 5325     
 5326     Repeating this test while also using 'blktrace /dev/sdb2' and Ctrl-C
 5327     around the test in a separate terminal, reports these numbers of I/Os
 5328     being performed:
 5329         Read requests   Read bytes
 5330                15,563      165 MiB
 5331     
 5332     Prior to this commit [1] from 0.0.9, GParted used libparted's
 5333     ped_file_system_get_resize_constraint() to report the minimum size to
 5334     which a FAT* file system can be resized.  Use this test program [2] to
 5335     performance test this method:
 5336     
 5337         # time ./fscons /dev/sdb2
 5338         dev=/dev/sdb2
 5339         sector_size=512
 5340         min_size=7909522
 5341         max_size=8388608
 5342     
 5343         real    0m2.673s
 5344         user    0m0.070s
 5345         sys     0m1.834s
 5346     
 5347     Free sectors in the file system according to libparted
 5348     ped_file_system_get_resize_constraint():
 5349         8388608 - 7909522 = 479086 sectors
 5350     
 5351     blktrace reports these numbers of I/Os being performed:
 5352         Read requests   Read bytes
 5353                 7,821       71 MiB
 5354     
 5355     So using libparted resize constraint is a bit faster but is still
 5356     reading too much data and is really too slow.  Also when testing GParted
 5357     using this libparted method against a corrupted FAT32 file system, on
 5358     every refresh, one popup dialog is displayed for each error libparted
 5359     detects with the file system, each of which needs acknowledgement.
 5360     Example popup:
 5361     
 5362                          Libparted Error
 5363         \DIRNAME\FILENAME.EXT is 107724k, but is has 1920
 5364         clusters (122880k).
 5365     
 5366                                      [ Cancel ][ Ignore ]
 5367     
 5368     There could be a huge number of such errors in a corrupted file system.
 5369     Not really suitable for use by GParted.
 5370     
 5371     Test the performance of mtools' minfo command to report the file system
 5372     figures:
 5373     
 5374         # time minfo -i /dev/sdb2 :: | \
 5375         > egrep 'sector size:|cluster size:|small size:|big size:|free clusters='
 5376         sector size: 512 bytes
 5377         cluster size: 8 sectors
 5378         small size: 0 sectors
 5379         big size: 8388608 sectors
 5380         free clusters=67681
 5381     
 5382         real    0m0.013s
 5383         user    0m0.004s
 5384         sys     0m0.019s
 5385     
 5386     Free sectors in the file system according to minfo:
 5387         67681 * 8 = 541448 sectors
 5388     
 5389     blktrace reports these numbers of I/Os being performed by minfo:
 5390         Read requests   Read bytes
 5391                     1       16 KiB
 5392     
 5393     This matches with minfo just reading information from the BPB (BIOS
 5394     Parameter Block) [3] from sector 0 and the FS Information Sector [4]
 5395     usually in sector 1.  Note that the free cluster figure reported by
 5396     minfo comes from the FS Information Sector because it only reports it
 5397     for FAT32 file systems, not for FAT16 file systems.  Scanning the File
 5398     Allocation Table (FAT) [5] to count free clusters is exactly what mdir,
 5399     without the '-f' (fast) flag, does.  Test the performance of mdir:
 5400     
 5401         # export MTOOLS_SKIP_CHECK=1
 5402         # time mdir -i /dev/sdb2 ::/ | fgrep 'bytes free'
 5403                                 277 221 376 bytes free
 5404     
 5405         real    0m0.023s
 5406         user    0m0.011s
 5407         sys     0m0.023s
 5408     
 5409     Free sectors in the file system according to mdir:
 5410         277221376 / 512 = 541448 sectors
 5411     
 5412     blktrace reports these number of I/Os being performed by mdir:
 5413         Read requests   Read bytes
 5414                     5      448 KiB
 5415     
 5416     So minfo and mdir together provide the needed information and are 2 to 3
 5417     orders of magnitude faster because they only read the needed BPB and FAT
 5418     data from the drive.  Use these together to read the file system usage.
 5419     
 5420     [1] 61cd0ce77879e4af84280ddcf77959ae55885ba4
 5421         lots of stuff and cleanups, including fixing getting used/unused
 5422         space of hfs/hfs+/fat16/fat32
 5423     
 5424     [2] fscons.c
 5425     /* FILE:     fscons.c
 5426      * SYNOPSIS: Report libparted's FS resize limits.
 5427      * BUILD:    gcc -o fscons fscons.c -lparted -lparted-fs-resize
 5428      */
 5429     
 5430     int main(int argc, const char *argv[])
 5431     {
 5432         PedDevice* dev = NULL;
 5433         PedDisk* tab = NULL;
 5434         PedPartition* ptn = NULL;
 5435         PedFileSystem* fs = NULL;
 5436         PedConstraint* cons = NULL;
 5437     
 5438         if (argc != 2)
 5439         {
 5440             fprintf(stderr, "Usage: fscons BLOCKDEV\n");
 5441             exit(1);
 5442         }
 5443     
 5444         dev = ped_device_get(argv[1]);
 5445         if (dev == NULL)
 5446         {
 5447             fprintf(stderr, "ped_device_get(\"%s\") failed\n", argv[1]);
 5448             exit(1);
 5449         }
 5450         printf("dev=%s\n", dev->path);
 5451         printf("sector_size=%ld\n", dev->sector_size);
 5452     
 5453         tab = ped_disk_new(dev);
 5454         if (tab == NULL)
 5455         {
 5456             fprintf(stderr, "ped_disk_new(dev) failed\n");
 5457             exit(1);
 5458         }
 5459     
 5460         ptn = ped_disk_get_partition_by_sector(tab, 0);
 5461         if (ptn == NULL)
 5462         {
 5463             fprintf(stderr, "ped_disk_get_partition(tab, 0) failed\n");
 5464             exit(1);
 5465         }
 5466     
 5467         fs = ped_file_system_open(&ptn->geom);
 5468         if (fs == NULL)
 5469         {
 5470             fprintf(stderr, "ped_file_system_open(&ptn->geom) failed\n");
 5471             exit(1);
 5472         }
 5473     
 5474         cons = ped_file_system_get_resize_constraint(fs);
 5475         if (cons == NULL)
 5476         {
 5477             fprintf(stderr, "ped_file_system_get_resize_constraint(fs) failed\n");
 5478             exit(1);
 5479         }
 5480         printf("min_size=%ld\n", cons->min_size);
 5481         printf("max_size=%ld\n", cons->max_size);
 5482     
 5483         ped_constraint_destroy(cons);
 5484         ped_file_system_close(fs);
 5485         ped_disk_destroy(tab);
 5486         ped_device_destroy(dev);
 5487     
 5488         return 0;
 5489     }
 5490     
 5491     [3] Design of the FAT file system, BIOS Parameter Block
 5492         https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#BIOS_Parameter_Block
 5493     
 5494     [4] Design of the FAT file system, FS Information Sector
 5495         https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#FS_Information_Sector
 5496     
 5497     [5] Design of the FAT file system, File Allocation Table
 5498         https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#File_Allocation_Table
 5499     
 5500     Bug 569921 - dosfsck -n delays device scan
 5501 
 5502 2019-06-22  Goran Vidović <trebelnik2@gmail.com>
 5503 
 5504     Update Croatian translation
 5505 
 5506 2019-06-19  Balázs Úr <balazs@urbalazs.hu>
 5507 
 5508     Update Hungarian translation
 5509 
 5510 2019-06-19  Daniel Mustieles <daniel.mustieles@gmail.com>
 5511 
 5512     Updated Spanish translation
 5513 
 5514 2019-06-16  Piotr Drąg <piotrdrag@gmail.com>
 5515 
 5516     Update Polish translation
 5517 
 5518 2019-06-11  Curtis Gedak <gedakc@gmail.com>
 5519 
 5520     Add missing window title to Help Contents dialog (!45)
 5521     
 5522     When GParted is configured with `--disable-doc` the help documentation
 5523     is neither built, nor installed.
 5524     
 5525     With this configuration the Help -> Contents menu displays a message
 5526     dialog indicating the "Documentation is not available".
 5527     
 5528     On GNOME 3 no title is shown; however, on some other graphic toolkits
 5529     / window managers an unspecified title is shown.
 5530     
 5531     For example on GParted Live with Fluxbox the following is displayed:
 5532     
 5533                              Unnamed
 5534                              -------
 5535     
 5536                    Documentation is not available
 5537     
 5538           This build of gparted is configured without documentation.
 5539           Documentation is available at the project web site.
 5540           https://gparted.org
 5541     
 5542                                OK
 5543     
 5544     To address the unspecified title on non-GNOME 3 graphic toolkits, add
 5545     a title that works with and without GNOME 3.
 5546     
 5547     Closes !45 - Add missing window title to Help Contents dialog
 5548 
 5549 2019-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5550 
 5551     Add missing Device.h include into GParted_Core and Win_GParted
 5552     
 5553     The files GParted_Core.h, GParted_Core.cc and Win_GParted.cc all use the
 5554     Device type but don't include Device.h for it's definition.  Include it.
 5555 
 5556 2019-05-21  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5557 
 5558     Replace partition boundary trimming with bug error messages (#48)
 5559     
 5560     All the dialogs which compose new or modified partition boundaries
 5561     create those partitions within the boundaries of the device.  Therefore
 5562     trimming the partition boundaries to device boundaries never happens.
 5563     So replace this trimming with bug error reports.
 5564     
 5565     Also add bug prefixes to the other error messages in
 5566     GParted_Core::valid_partition() too.
 5567     
 5568     Closes #48 - Error when moving locked LUKS-encrypted partition
 5569 
 5570 2019-05-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5571 
 5572     White space layout update in snap_to_mebibyte/cylinder() (#48)
 5573     
 5574     The previous commit moved the code from GParted_Core to
 5575     Dialog_Base_Partition class without making a single formatting change to
 5576     ensure the code was guaranteed to work the same within that larger
 5577     commit.  Now reformat the code to current layout standards.  Making it a
 5578     separate commit simplifies the effort for both changes and improves
 5579     bisectability.
 5580     
 5581     Additionally to be sure there were no code changes,
 5582     Dialog_Base_Partition.cc was compiled to assembler code with and without
 5583     this change applied and the resultant assembler code compared.  There
 5584     were no differences in the generated assembler code.
 5585     
 5586     Start with the make generated g++ command for compiling
 5587     Dialog_Base_Partition.o; (1) remove the '-g' flag as inserted debugging
 5588     directives do differ; and (2) replace '-c -o Dialog_Base_Partition.o'
 5589     with '-S -o Dialog_Base_Partition.s' to produce assembler output instead
 5590     of object code.
 5591     
 5592     Closes #48 - Error when moving locked LUKS-encrypted partition
 5593 
 5594 2019-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5595 
 5596     Snap partition boundaries before dialogs update FS usage (#48)
 5597     
 5598     Move snap_to_*() method calls from the point when all operations are
 5599     added to the list, to earlier when Resize/Move, Paste (into new) and
 5600     Create New dialogs are composing the new partition objects.  In
 5601     particular for the Resize/Move operation, to just before updating the
 5602     file system usage.
 5603     
 5604     This change finally resolves this bug.
 5605     
 5606     Because of the dialog call chains into Dialog_Base_Partition,
 5607     snap_to_alignment() must be added into:
 5608     * Dialog_Base_Partition::prepare_new_partition() for the Resize/Move and
 5609       Paste (into new) dialogs; and
 5610     * Dialog_Partition_New::Get_New_Partition() for the Create New dialog.
 5611     
 5612     Closes #48 - Error when moving locked LUKS-encrypted partition
 5613 
 5614 2019-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5615 
 5616     Pass the current device down to Dialog_Base_Partition class (#48)
 5617     
 5618     The current device has to be passed to the dialog constructors and then
 5619     on to the Dialog_Base_Constructor.  Note that the Dialog_Partition_New
 5620     constructor is already passed the current device, however it still needs
 5621     to pass it on to Dialog_Base_Constructor.
 5622     
 5623     This is ready so that snap_to_*() methods can access the current device
 5624     when they are called from within these dialogs.
 5625     
 5626     * Pass Parameter to Base Class Constructor while creating Derived class
 5627       Object
 5628       https://stackoverflow.com/questions/16585856/pass-parameter-to-base-class-constructor-while-creating-derived-class-object
 5629     
 5630     Closes #48 - Error when moving locked LUKS-encrypted partition
 5631 
 5632 2019-05-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5633 
 5634     Update file system usage last in prepare_new_partition() (#48)
 5635     
 5636     Move setting of the new_partition object file system usage to after
 5637     everything else, specifically after free_space_before and strict_start.
 5638     This is because snap_to_*() use free_space_before and strict_start and
 5639     snap_to_alignment() is going to be called before the file system usage
 5640     is updated to avoid the error in this bug report.
 5641     
 5642     Closes #48 - Error when moving locked LUKS-encrypted partition
 5643 
 5644 2019-05-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5645 
 5646     Remove unused error reporting from snap_to_*() (#48)
 5647     
 5648     None of the snap_to_*() methods report any errors so remove the unused
 5649     error parameter and return value.
 5650     
 5651     Closes #48 - Error when moving locked LUKS-encrypted partition
 5652 
 5653 2019-05-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5654 
 5655     Separate partition alignment from validation (#48)
 5656     
 5657     PATCHSET OVERVIEW
 5658     
 5659     A user had 2 adjacent partitions which were aligned to multiples of
 5660     33553920 bytes (32 MiB - 512 bytes), not MiB or cylinders.  As far as
 5661     GParted is concerned this is not aligned.  The second partition
 5662     contained closed LUKS encrypted data.  Recreate this setup with:
 5663     
 5664         # truncate -s 200G /tmp/disk.img
 5665         # losetup -f --show /tmp/disk.img
 5666         /dev/loop0
 5667         # sfdisk -u S /dev/loop0 << EOF
 5668         65535 2162655 83
 5669         2228190 78904140 83
 5670         EOF
 5671         # partprobe /dev/loop0
 5672         # echo -n badpassword | cryptsetup luksFormat /dev/loop0p2 -
 5673     
 5674     When trying to move the second LUKS encrypted partition to the right by
 5675     any amount, with the default MiB alignment, GParted displays this error
 5676     dialog and fails to even queue the operation:
 5677     
 5678         Could not add this operation to the list
 5679         A partition with used sectors (78907392) greater than its
 5680         length (78905344) is not valid
 5681         [                       OK                               ]
 5682     
 5683     Overview of the steps involved:
 5684     
 5685     1. The Resize/Move dialog composed a new partition to start a whole
 5686        multiple of MiB after the end of the previous non-aligned partition.
 5687        The new partition also had it's size increased to a whole multiple of
 5688        MiB, to 78907392 sectors (38529 MiB) which was 1.59 MiB larger than
 5689        before.  Neither the start or end of the new partition are aligned at
 5690        this point.
 5691     
 5692     2. Win_GParted::activate_resize() applied the change back to the closed
 5693        LUKS partition object, additionally making the used sectors equal to
 5694        the partition size.
 5695        (To match the fact that when opened the LUKS mapping it will
 5696        automatically fill the new larger partition size).
 5697     
 5698     3. GParted_Core::snap_to_mebibyte() then aligned the partition start and
 5699        end to whole MiB boundaries, reducing the partition size in the
 5700        process to 78905344 (38528 MiB).
 5701     
 5702     4. GParted_Core::snap_to_alignment() reported the error saying that it
 5703        couldn't add the operation to the list because it was invalid to have
 5704        the file system used sectors larger than the partition size.
 5705     
 5706     Fix this by having the snap to alignment adjustments applied before the
 5707     dialogs update any associated file system usage.  Specifically the
 5708     Resize/Move, Paste (into new) and Create New dialogs as these are the
 5709     only ones which either create or modify partition boundaries.
 5710     Validation done by snap_to_alignment() will continue to occur at the
 5711     current point when the operation is added to the list.
 5712     
 5713     THIS COMMIT
 5714     
 5715     snap_to_alignment() is doing two different jobs, it is (1) optionally
 5716     adjusting the new partition boundaries for MiB or Cylinder alignment;
 5717     and (2) checking that the partition boundaries and file system usage are
 5718     valid.
 5719     
 5720     Split those into two different functions (1) snap_to_alignment() and
 5721     (2) valid_partition().  For now valid_partition() still calls
 5722     snap_to_alignment() so there is no functional change with this commit.
 5723     
 5724     Closes #48 - Error when moving locked LUKS-encrypted partition
 5725 
 5726 2019-06-09  Daniel Șerbănescu <daniel@serbanescu.dk>
 5727 
 5728     Update Romanian translation
 5729 
 5730 2019-06-06  Wolfgang Stöggl <c72578@yahoo.de>
 5731 
 5732     Update German translation
 5733 
 5734 2019-06-03  Balázs Úr <balazs@urbalazs.hu>
 5735 
 5736     Update Hungarian translation
 5737 
 5738 2019-05-22  Félix Piédallu <felix@piedallu.me>
 5739 
 5740     Fix test (dentry->d_name is invalidated by closedir...) (!41)
 5741     
 5742     We have to copy the dentry->d_name before calling closedir().  If not,
 5743     the string points to nothing and the test fails (It does not fail all
 5744     the time, but only by chance).
 5745     
 5746     Confirmed using valgrind.  Selected output from running the unit test
 5747     under valgrind:
 5748     
 5749       $ valgrind --track-origins=yes ./test_blockSpecial
 5750       ==25110== Memcheck, a memory error detector
 5751       ...
 5752       ==25110== Command: ./test_BlockSpecial
 5753       ==25110==
 5754       Running main() from src/gtest_main.cc
 5755       [==========] Running 26 tests from 1 test case.
 5756       [----------] Global test environment set-up.
 5757       [----------] 26 tests from BlockSpecialTest
 5758       ...
 5759       [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
 5760       ==25110== Invalid read of size 1
 5761       ==25110==    at 0x4C2C9B2: strlen (vg_replace_strmem.c:458)
 5762       ==25110==    by 0x40E7C4: length (char_traits.h:259)
 5763       ==25110==    by 0x40E7C4: append (basic_string.h:1009)
 5764       ==25110==    by 0x40E7C4: operator+<char, std::char_traits<char>, std::allocator<char> > (basic_string.h:2468)
 5765       ==25110==    by 0x40E7C4: get_link_name (test_BlockSpecial.cc:156)
 5766       ==25110==    by 0x40E7C4: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
 5767       ...
 5768       =25110==  Address 0x1231ea93 is 115 bytes inside a block of size 32,816 free'd
 5769       ==25110==    at 0x4C2ACBD: free (vg_replace_malloc.c:530)
 5770       ==25110==    by 0x9F773AC: closedir (in /usr/lib64/libc-2.17.so)
 5771       ==25110==    by 0x40E7AC: get_link_name (test_BlockSpecial.cc:153)
 5772       ==25110==    by 0x40E7AC: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
 5773       ...
 5774       ==25110==  Block was alloc'd at
 5775       ==25110==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
 5776       ==25110==    by 0x9F77280: __alloc_dir (in /usr/lib64/libc-2.17.so)
 5777       ==25110==    by 0x40E746: get_link_name (test_BlockSpecial.cc:134)
 5778       ==25110==    by 0x40E746: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
 5779       ...
 5780       ==25110== Invalid read of size 1
 5781       ==25110==    at 0x4C2E220: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:1022)
 5782       ==25110==    by 0x953A997: std::string::append(char const*, unsigned long) (in /usr/lib64/libstdc++.so.6.0.19)
 5783       ==25110==    by 0x40E7D2: append (basic_string.h:1009)
 5784       ==25110==    by 0x40E7D2: operator+<char, std::char_traits<char>, std::allocator<char> > (basic_string.h:2468)
 5785       ==25110==    by 0x40E7D2: get_link_name (test_BlockSpecial.cc:156)
 5786       ==25110==    by 0x40E7D2: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
 5787       ...
 5788       ==25110==  Address 0x1231ea93 is 115 bytes inside a block of size 32,816 free'd
 5789       ==25110==    at 0x4C2ACBD: free (vg_replace_malloc.c:530)
 5790       ==25110==    by 0x9F773AC: closedir (in /usr/lib64/libc-2.17.so)
 5791       ==25110==    by 0x40E7AC: get_link_name (test_BlockSpecial.cc:153)
 5792       ==25110==    by 0x40E7AC: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
 5793       ...
 5794       ==25110==  Block was alloc'd at
 5795       ==25110==    at 0x4C29BC3: malloc (vg_replace_malloc.c:299)
 5796       ==25110==    by 0x9F77280: __alloc_dir (in /usr/lib64/libc-2.17.so)
 5797       ==25110==    by 0x40E746: get_link_name (test_BlockSpecial.cc:134)
 5798       ==25110==    by 0x40E746: GParted::BlockSpecialTest_NamedBlockSpecialObjectBySymlinkMatches_Test::TestBody() (test_BlockSpecial.cc:247)
 5799       ...
 5800       [       OK ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (50 ms)
 5801     
 5802     Selected lines from test_BlockSpecial.cc:
 5803     
 5804       132  static std::string get_link_name()
 5805       133  {
 5806       134          DIR * dir = opendir( "/dev/disk/by-id" );
 5807       ...
 5808       141          bool found = false;
 5809       142          struct dirent * dentry;
 5810       143          // Silence GCC [-Wparentheses] warning with double parentheses
 5811       144          while ( ( dentry = readdir( dir ) ) )
 5812       145          {
 5813       146                  if ( strcmp( dentry->d_name, "." )  != 0 &&
 5814       147                       strcmp( dentry->d_name, ". " ) != 0    )
 5815       148                  {
 5816       149                          found = true;
 5817       150                          break;
 5818       151                  }
 5819       152          }
 5820       153          closedir( dir );
 5821       154
 5822       155          if ( found )
 5823       156                  return std::string( "/dev/disk/by-id/" ) + dentry->d_name;
 5824     
 5825     So the memory referred to by dentry was allocated on line 134, freed on
 5826     153 and accessed after freed on 156.
 5827     
 5828     Closes !41 - Fix test (dentry->d_name is invalidated by closedir...)
 5829 
 5830 2019-05-29  Curtis Gedak <gedakc@gmail.com>
 5831 
 5832     Fix link typo in French translation of GParted help manual
 5833 
 5834 2019-05-29  Curtis Gedak <gedakc@gmail.com>
 5835 
 5836     Append -git to version for continuing development
 5837 
 5838 2019-05-29  Curtis Gedak <gedakc@gmail.com>
 5839 
 5840     ==========   gparted-1.0.0   ==========
 5841 
 5842 2019-05-29  Curtis Gedak <gedakc@gmail.com>
 5843 
 5844     Update copyright years
 5845 
 5846 2019-05-28  Claude Paroz <claude@2xlibre.net>
 5847 
 5848     Update French translation
 5849 
 5850 2019-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5851 
 5852     Fix reading NTFS usage after resize (#57)
 5853     
 5854     After an NTFS file system has been resized the command GParted currently
 5855     uses to read the file system usage fails like this:
 5856     
 5857         # ntfsinfo --mft /dev/sdb1
 5858         Volume is scheduled for check.
 5859         Please boot into Windows TWICE, or use the 'force' option.
 5860         NOTE: If you had not scheduled check and last time accessed this volume
 5861         using ntfsmount and shutdown system properly, then init scripts in your
 5862         distribution are broken. Please report to your distribution developers
 5863         (NOT to us!) that init scripts kill ntfsmount or mount.ntfs-fuse during
 5864         shutdown instead of proper umount.
 5865         Failed to open '/dev/sdb1'.
 5866     
 5867     Fix by added the '--force' flag as described in the error message.
 5868     
 5869     Closes #57 - NTFS Resize results in Partition Information Warning on
 5870                  Refresh
 5871 
 5872 2019-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 5873 
 5874     Report errors correctly on failure to read NTFS usage (#57)
 5875     
 5876     GParted uses ntfsinfo to read the NTFS file system usage.  However when
 5877     ntfsinfo fails with a non-zero exit status GParted reports stdout twice,
 5878     rather than stdout and stderr.  Correct this.
 5879     
 5880     Closes #57 - NTFS Resize results in Partition Information Warning on
 5881                  Refresh
 5882 
 5883 2019-05-26  Anders Jonsson <anders.jonsson@norsjovallen.se>
 5884 
 5885     Update Swedish translation
 5886 
 5887 2019-05-26  Anders Jonsson <anders.jonsson@norsjovallen.se>
 5888 
 5889     Update Swedish translation
 5890 
 5891 2019-05-25  Trần Ngọc Quân <vnwildman@gmail.com>
 5892 
 5893     Updated Vietnamese translation
 5894     
 5895     Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
 5896 
 5897 2019-05-22  Jiri Grönroos <jiri.gronroos@iki.fi>
 5898 
 5899     Update Finnish translation
 5900 
 5901 2019-05-22  Claude Paroz <claude@2xlibre.net>
 5902 
 5903     Update French translation
 5904 
 5905 2019-05-22  Rafael Fontenelle <rafaelff@gnome.org>
 5906 
 5907     Update Brazilian Portuguese translation
 5908 
 5909 2019-05-22  Sveinn í Felli <sv1@fellsnet.is>
 5910 
 5911     Update Icelandic translation
 5912 
 5913 2019-05-03  Luca Bacci <luca.bacci982@gmail.com>
 5914 
 5915     Set the xalign property for Gtk::Labels (!40)
 5916     
 5917     With the same case as from the previous commit, the very long "Mounted
 5918     on ..." text is now wrapped, but the text may not be left justified.
 5919     Slowly adjust the dialog width and see how the text wrapping is updated
 5920     to fit the size adjustment but the text is centred rather than left
 5921     justified.
 5922     
 5923     This is because setting the halign property to Gtk::ALIGN_START does not
 5924     guarantee left alignment of text for wrapped or ellipsized Gtk::Labels.
 5925     
 5926     Use the xalign property instead.
 5927     
 5928     To set the xalign property there is a method in the GtkMisc (Gtk::Misc)
 5929     base class:
 5930     
 5931       gtk_misc_set_alignment (Gtk::Misc::set_alignment)
 5932     
 5933     However, GtkMisc (Gtk::Misc) was deprecated in Gtk 3.14 (Gtkmm 3.14)
 5934     and in Gtk 3.16 (gtkmm 3.16) set_alignment() was replaced with the
 5935     introduction of two new methods:
 5936     
 5937       gtk_label_set_xalign (Gtk::Label::set_xalign)
 5938       gtk_label_set_yalign (Gtk::Label::set_yalign)
 5939     
 5940     Add a check for Gtkmm method Gtk::Label::set_xalign() in configure.ac
 5941     and use it when available.
 5942     
 5943     References:
 5944     
 5945     [1] Gtk3 Reference Documentation - gtk_misc_set_alignment()
 5946         https://developer.gnome.org/gtk3/stable/GtkMisc.html#gtk-misc-set-alignment
 5947         "gtk_misc_set_alignment has been deprecated since version 3.14 and
 5948         should not be used in newly-written code. Use GtkWidget's alignment
 5949         ("halign" and "valign") and margin properties or GtkLabel's
 5950         "xalign" and "yalign" properties."
 5951     
 5952     [2] Gtkmm 3.16 Gtk::Misc Class Reference, set_alignment() method
 5953         https://developer.gnome.org/gtkmm/3.16/classGtk_1_1Misc.html#a52b2675874cf46a3097938756b9fe9e8
 5954     
 5955     [3] GNOME BugZilla - EmptyBoxes: instructions_label's alignment is off
 5956         https://bugzilla.gnome.org/show_bug.cgi?id=735841
 5957     
 5958     [4] Gtk commit from 2014-09-16:
 5959         GtkLabel: add x/yalign properties
 5960         https://gitlab.gnome.org/GNOME/gtk/commit/d39424fc
 5961     
 5962     [5] Gtk3 Reference Documentation - gtk_label_set_xalign()
 5963         https://developer.gnome.org/gtk3/stable/GtkLabel.html#gtk-label-set-xalign
 5964     
 5965     [6] Gtkmm 3.16 Gtk::Label Class Reference, set_xalign() method
 5966         https://developer.gnome.org/gtkmm/3.16/classGtk_1_1Label.html#acee7d4e87d7cc14080a7b8ded5f84e5e
 5967     
 5968     Closes !40 - Limit wrapping labels
 5969 
 5970 2019-05-01  Luca Bacci <luca.bacci982@gmail.com>
 5971 
 5972     Set a default max_width_chars for wrapping Gtk::Labels (!40)
 5973     
 5974     Opening the Partition Information dialog for a file system mounted on a
 5975     very long mount point, or on openSUSE which mounts the OS from 10 btrfs
 5976     subvolumes from the same partition, will cause the dialog to be very
 5977     wide as the "Mounted on ..." text is not wrapped.
 5978     
 5979     Back in Gtk2, when width_chars / max_width_chars were not set, wrapping
 5980     labels had a default width beyond which text wrapped onto a new line
 5981     [1].
 5982     
 5983     For Gtk3 this default width was first reworked a bit [2], and then was
 5984     removed for the very early Gtk3 3.0.10 release [3].
 5985     
 5986     It is recommended that applications explicitly set default values,
 5987     otherwise wrapping labels never wrap when requesting their natural
 5988     allocation.
 5989     
 5990     References:
 5991     
 5992     [1] Gtk 2.24.32 source code - gtk/gtklabel.c:2975
 5993         https://gitlab.gnome.org/GNOME/gtk/blob/2.24.32/gtk/gtklabel.c#L2975
 5994             "This long string gives a good enough length for any line to
 5995             have."
 5996     
 5997     [2] Gtk commit from 2010-04-21:
 5998         https://gitlab.gnome.org/GNOME/gtk/commit/680d7762baabb71aa77aeec793e3c70a2013d3b8
 5999         Make sure not to base the minimum size on "max-width-chars", only
 6000         the natural size.
 6001             "This string is just about long enough."
 6002     
 6003     [3] Gtk commit from 2011-04-17:
 6004         https://gitlab.gnome.org/GNOME/gtk/commit/c8ce1106c11361f8b47dd4e9a08db571c7d66d82
 6005         label: Don't try to guess a label's size
 6006     
 6007         People should use window default sizes or label
 6008         width-chars/max-width-chars to find the ideal layout for a label
 6009         instead of relying on magic.
 6010     
 6011     Closes !40 - Limit wrapping labels
 6012 
 6013 2019-05-01  Luca Bacci <luca.bacci982@gmail.com>
 6014 
 6015     Request natural width in Gtk::ScrolledWindows for Gtk >= 3.22 (!39)
 6016     
 6017     Before Gtk 3.22 GtkScrolledWindow propagated natural size to its
 6018     Children and so on to descendants.  In Gtk 3.22 this was changed to
 6019     always request the minimum size.  This was done because it is believed
 6020     to be a safer default (gives a better behaviour) in case of dynamic
 6021     content inside the scrolled window, that is, content that may change
 6022     allocated size. [1][2][3]
 6023     
 6024     When the scrolled window content is not dynamic the natural size is
 6025     preferable because it gives a better looking layout and without any
 6026     downside.
 6027     
 6028     In the case of GParted content which is not dynamic, so request the
 6029     scrolled windows to allocate children at natural sizes for Gtk >= 3.22.
 6030     
 6031     The benefits of natural size allocation are evident in presence of
 6032     wrapping labels (for example inside the "Partition Info" dialog), that
 6033     with the minimum size request likely end up taking a very small width.
 6034     
 6035     References:
 6036     
 6037     [1] Gtk commit from 2016-08-31:
 6038         GtkScrolledWindow: Make propagation of natural child sizes optional
 6039         https://gitlab.gnome.org/GNOME/gtk/commit/0984d1622d022bf67207f985f7842b6299818e20
 6040         "Making propagation of child natural sizes mandatory (or default,
 6041         even) was evidently a mistake as this causes dynamic content in a
 6042         scrolled window to resize it's parent when the scrolled window is
 6043         competing for space with an adjacent widget."
 6044     
 6045     [2] Gtk 3.22 Reference Documentation -
 6046         gtk_scrolled_window_set_propagate_natural_width
 6047         https://developer.gnome.org/gtk3/3.22/GtkScrolledWindow.html#gtk-scrolled-window-set-propagate-natural-width
 6048     
 6049     [3] Gtkmm 3.24 Gtk::ScrolledWindow Class Reference,
 6050         set_propagate_natural_width() method
 6051         https://developer.gnome.org/gtkmm/3.24/classGtk_1_1ScrolledWindow.html#a2d4cb945688ecb8739efd70b18742779
 6052     
 6053     [4] Gtkmm 3.21.6 NEWS
 6054         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.21.6/NEWS
 6055         "ScrolledWindow: Added get/set_propagate_natural_height/width() and
 6056         the properties."
 6057     
 6058     Closes !39 - Always request natural size inside Gtk::ScrolledWindow
 6059 
 6060 2019-05-10  Rafael Fontenelle <rafaelff@gnome.org>
 6061 
 6062     Update Brazilian Portuguese translation
 6063 
 6064 2019-05-01  Yuras Shumovich <shumovichy@gmail.com>
 6065 
 6066     Update Belarusian translation
 6067 
 6068 2019-04-30  Seong-ho Cho <shcho@gnome.org>
 6069 
 6070     Update Korean translation
 6071 
 6072 2018-05-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6073 
 6074     Replace deprecated get_vbox() with get_content_area() (!25)
 6075     
 6076     get_vbox() was deprecated in gtkmm 3.1.6 [1][2].  Switch to the
 6077     get_content_area() replacement.  Note that GParted already requires
 6078     gtkmm >= 3.4 as set in configure.ac.
 6079     
 6080     [1] Gtkmm 3.1.6 NEWS
 6081         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.1.6/NEWS
 6082         "Dialog: Deprecate get_vbox(), replacing with get_content_area(),
 6083         to match the C function name."
 6084     
 6085     [2] Gtkmm commit from 2011-06-13:
 6086         Dialog: Deprecate get_vbox(), replacing with get_content_area().
 6087         https://git.gnome.org/browse/gtkmm/commit/?id=5ccc289fa8e9b046c07f5ea234f5ced8c6356fc1
 6088     
 6089     Closes !25 - Modern Gtk3 - part 1
 6090 
 6091 2019-03-13  Luca Bacci <luca.bacci982@gmail.com>
 6092 
 6093     Use Gtk::Grid for Dialog_Partition_Info (!25)
 6094     
 6095     Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
 6096     
 6097     This commit makes the change for Dialog_Partition_Info.
 6098     
 6099     Closes !25 - Modern Gtk3 - part 1
 6100 
 6101 2019-03-07  Luca Bacci <luca.bacci982@gmail.com>
 6102 
 6103     Use Gtk::Grid for Win_GParted pt2 (!25)
 6104     
 6105     Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
 6106     
 6107     This commit makes the change for Win_GParted / pt2.
 6108     
 6109     Closes !25 - Modern Gtk3 - part 1
 6110 
 6111 2019-03-06  Luca Bacci <luca.bacci982@gmail.com>
 6112 
 6113     Use Gtk::Grid for Win_GParted pt1 (!25)
 6114     
 6115     Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
 6116     
 6117     This commit makes the change for Win_GParted / pt1.
 6118     
 6119     Closes !25 - Modern Gtk3 - part 1
 6120 
 6121 2019-03-06  Luca Bacci <luca.bacci982@gmail.com>
 6122 
 6123     Use Gtk::Grid for Dialog_Base_Partition (!25)
 6124     
 6125     Gtk::Table was deprecated in Gtk 3.4.0.  Replace with Gtk::Grid.
 6126     
 6127     This commit makes the change for Dialog_Base_Partition.
 6128     
 6129     Closes !25 - Modern Gtk3 - part 1
 6130 
 6131 2019-03-06  Luca Bacci <luca.bacci982@gmail.com>
 6132 
 6133     Use Gtk::Grid for Dialog_Partition_New (!25)
 6134     
 6135     Gtk::Table was deprecated in Gtk 3.4.0 [1].  Replace with Gtk::Grid.
 6136     Note that the meaning of the attachment parameters changed between
 6137     Gtk::Table::attach() [2] from left, right, top, bottom and
 6138     Gtk::Grid::attach() [3] to left, top, width, height.
 6139     
 6140     This commit makes the change for Dialog_Base_Partition.
 6141     
 6142     [1] Gtkmm 3.4 NEWS file (actually first included in gtkmm 3.3.2
 6143         unstable)
 6144         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.4.0/NEWS#L162
 6145             * Deprecate Gtk::Table in favour of Gtk::Grid.
 6146     
 6147     [2] Gtkmm 3.4 Gtk::Table Class Reference, attach() method
 6148         https://developer.gnome.org/gtkmm/3.4/classGtk_1_1Table.html#a28b6926e68337a51ba29f2b4dd69f087
 6149             Deprecated: 3.4: Use Gtk::Grid::attach() with Gtk:Grid.  Note
 6150             that the attach argument differ between those two function.
 6151     
 6152     [3] Gtkmm 3.4 Gtk::Grid Class Reference, attach() method
 6153         https://developer.gnome.org/gtkmm/3.4/classGtk_1_1Grid.html#a9c425e95660daff60a77fc0cafc18115
 6154     
 6155     Closes !25 - Modern Gtk3 - part 1
 6156 
 6157 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6158 
 6159     Use Gtk::Separator (!25)
 6160     
 6161     Gtk::HSeparator was deprecated in Gtkmm 3.2.  Replace with plain
 6162     Gtk::Separator.
 6163     
 6164     Closes !25 - Modern Gtk3 - part 1
 6165 
 6166 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6167 
 6168     Use Gtk::Paned (!25)
 6169     
 6170     Gtk::HPaned and Gtk::VPaned were deprecated in Gtkmm 3.2.  Replace with
 6171     plain Gtk::Paned.
 6172     
 6173     Closes !25 - Modern Gtk3 - part 1
 6174 
 6175 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6176 
 6177     Use Gtk::Box for Dialog_Progress (!25)
 6178     
 6179     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6180     plain Gtk::Box.
 6181     
 6182     This commit makes the change for Dialog_Progress.cc.
 6183     
 6184     Closes !25 - Modern Gtk3 - part 1
 6185 
 6186 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6187 
 6188     Use Gtk::Box for Dialog_Rescue_Data (!25)
 6189     
 6190     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6191     plain Gtk::Box.
 6192     
 6193     This commit makes the change for Dialog_Rescue_Data.cc.
 6194     
 6195     Closes !25 - Modern Gtk3 - part 1
 6196 
 6197 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6198 
 6199     Use Gtk::Box for DialogPasswordEntry (!25)
 6200     
 6201     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6202     plain Gtk::Box.
 6203     
 6204     This commit makes the change for DialogPasswordEntry.cc.
 6205     
 6206     Closes !25 - Modern Gtk3 - part 1
 6207 
 6208 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6209 
 6210     Use Gtk::Box for Dialog_Partition_Name (!25)
 6211     
 6212     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6213     plain Gtk::Box.
 6214     
 6215     This commit makes the change for Dialog_Partition_Name.cc.
 6216     
 6217     Closes !25 - Modern Gtk3 - part 1
 6218 
 6219 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6220 
 6221     Use Gtk::Box for Dialog_FileSystem_Label (!25)
 6222     
 6223     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6224     plain Gtk::Box.
 6225     
 6226     This commit makes the change for Dialog_FileSystem_Label.cc.
 6227     
 6228     Closes !25 - Modern Gtk3 - part 1
 6229 
 6230 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6231 
 6232     Use Gtk::Box for DialogFeatures (!25)
 6233     
 6234     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6235     plain Gtk::Box.
 6236     
 6237     This commit makes the change for DialogFeatures.cc.
 6238     
 6239     Closes !25 - Modern Gtk3 - part 1
 6240 
 6241 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6242 
 6243     Use Gtk::Box for Dialog_DiskLabel (!25)
 6244     
 6245     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6246     plain Gtk::Box.
 6247     
 6248     This commit makes the change for Dialog_DiskLabel.cc.
 6249     
 6250     Closes !25 - Modern Gtk3 - part 1
 6251 
 6252 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6253 
 6254     Use Gtk::Box for Dialog_Partition_Info (!25)
 6255     
 6256     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6257     plain Gtk::Box.
 6258     
 6259     This commit makes the change for Dialog_Partition_Info.{h,cc}.
 6260     
 6261     Closes !25 - Modern Gtk3 - part 1
 6262 
 6263 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6264 
 6265     Use Gtk::Box for Dialog_Base_Partition (!25)
 6266     
 6267     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6268     plain Gtk::Box.
 6269     
 6270     This commit makes the change for Dialog_Base_Partition.{h,cc}.
 6271     
 6272     Closes !25 - Modern Gtk3 - part 1
 6273 
 6274 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6275 
 6276     Use Gtk::Box for HBoxOperations (!25)
 6277     
 6278     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2.  Replace with
 6279     plain Gtk::Box.
 6280     
 6281     This commit makes the change for HBoxOperations.{h,cc}.
 6282     
 6283     Closes !25 - Modern Gtk3 - part 1
 6284 
 6285 2019-02-27  Luca Bacci <luca.bacci982@gmail.com>
 6286 
 6287     Use Gtk::Box for Win_GParted (!25)
 6288     
 6289     Gtk::HBox and Gtk::VBox were deprecated in Gtkmm 3.2 [1].  Replace with
 6290     plain Gtk::Box.
 6291     
 6292     This commit makes the change for Win_GParted.{h,cc}.
 6293     
 6294     [1] Gtkmm 3.2.0 NEWS file (actually first included in gtkmm 3.1.6
 6295         unstable)
 6296         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.2.0/NEWS#L91
 6297             Gtk:
 6298             * All H* or V* specialized classes have been deprecated, to
 6299               match the deprecations in the GTK+ C API.  You should now
 6300               set the orientation instead.
 6301               This includes HBox, VBox, HButtonBox, VButtonBox, HPaned,
 6302               VPaned, HScale, VScale, HSeparator, VSeparator, HScrollbar and
 6303               VScrollbar.
 6304     
 6305     Closes !25 - Modern Gtk3 - part 1
 6306 
 6307 2019-02-20  Luca Bacci <luca.bacci982@gmail.com>
 6308 
 6309     Use Gdk::RGBA (!25)
 6310     
 6311     The Gdk::RGBA data type was introduced to replace Gdk::Color in
 6312     Gtkmm 3.0 [1], with Gdk::Color being deprecated in Gtkmm 3.10 [2].
 6313     
 6314     With this commit we make the change to Gdk::RGBA data type which is the
 6315     modern replacement to Gdk::Color.  Gdk::RGBA can be used almost as a
 6316     drop in replacement because it keeps most of the Gdk::Color interface.
 6317     
 6318     Also, this commit removes the C Gtk call introduced during the
 6319     port-to-gtk3 patchset by commit:
 6320         53793527668a344fe54ceb61a1afdc39c24c5c45
 6321         repare-for-gtk3: Prepare for removal of Gtk::Widget::modify_fg() (#7)
 6322     
 6323     [1] Gtkmm 3.0.1 NEWS file
 6324         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.0.1/NEWS#L48
 6325             * RGBA replaces Color, though Color still exists because it is
 6326               used by TextView.  We hope to deprecated Color completely in
 6327               gtkmm 3.2.
 6328     
 6329     [2] Gtkmm 3.10.0 NEWS file
 6330         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.10.0/NEWS#L127
 6331             Gdk:
 6332             * Deprecate Color.
 6333     
 6334     Closes !25 - Modern Gtk3 - part 1
 6335 
 6336 2019-04-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6337 
 6338     Update includes in DialogFeatures.h and .cc
 6339     
 6340     Mostly add, but also remove, #includes so both DialogFeatures.h and .cc
 6341     include exactly the header files each needs to get the definitions they
 6342     use.
 6343     
 6344     Header file #include guards are there to specifically enable this.
 6345 
 6346 2019-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6347 
 6348     Rename method to DialogFeatures::load_one_filesystem()
 6349     
 6350     To better reflect that it is loading the supported actions for one file
 6351     system into the treeview, just like it's parent load_filesystems() is
 6352     initiating the loading for all the file systems.
 6353 
 6354 2019-04-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6355 
 6356     Fix available Partition menu options not being updated on rescan (!38)
 6357     
 6358     Select a partition and look at the available actions in the Partition
 6359     menu.  Then add or remove some commands which that particular file
 6360     system uses and rescan to detect those changes.  Open the Partition menu
 6361     again.  It doesn't reflect the changes of supported actions seen in the
 6362     File System Support dialog.  Select a different partition and then
 6363     select the original partition again.  Now the available actions in the
 6364     Partition menu reflect the changes of supported actions.
 6365     
 6366     Have been testing by adding and removing /sbin/e2label to add and
 6367     remove EXT2/3/4 file system labelling support just because that feature
 6368     has existed for a very long time and EXT2/3/4 are displayed near the top
 6369     of the File System Support dialog.  Tested this minor issue existed as
 6370     far back as GParted 0.3.7.
 6371     
 6372     Fix by simply also refreshing the valid operations to update the
 6373     Partition menu after updating the found file system specific commands.
 6374     
 6375     Closes !38 - Fixes for minor issues with File System Support rescanning
 6376 
 6377 2019-04-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6378 
 6379     Fix File System Support dialog not showing changes after rescan (!38)
 6380     
 6381     Open the File System Support dialog, either add or remove some file
 6382     system specific commands used by GParted and press the
 6383     [Rescan For Supported Actions] button.  The supported actions don't
 6384     change.  However after just closing and reopening the dialog, the
 6385     supported actions do reflect the added or removed file system specific
 6386     commands.
 6387     
 6388     Bisected to this commit:
 6389         4d6d46466478f656ce2ebb3c6b5a88cf0657667f
 6390         Display "other" in the File System Support dialog (!13)
 6391     
 6392     The problem is that commit made a subset copy of the
 6393     GParted_Core::FILESYSTEMS vector, obtained from get_filesystems(), so
 6394     when the rescan ran and the FILESYSTEMS vector was updated with new
 6395     supported actions, the dialog still displayed the original subset copy,
 6396     so didn't reflect the changed supported actions.
 6397     
 6398     Fix by passing a reference to the GParted_Core::FILESYSTEMS vector,
 6399     obtained from get_filesystems(), and perform the necessary filtering
 6400     inside the dialog, like before the above faulty commit.  Additionally
 6401     finding and adding "other" file system to the end of the list.
 6402     
 6403     Closes !38 - Fixes for minor issues with File System Support rescanning
 6404 
 6405 2019-04-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6406 
 6407     Stop checking for 'ntfslabel --new-serial' support
 6408     
 6409     The oldest supported distributions have these versions of ntfs-3g /
 6410     ntfsprogs.
 6411     
 6412       Distro             EOL        ntfs-3g / ntfsprogs
 6413     - Debian 8           2020-Jun   2014.2.16AR.2
 6414     - RHEL / CentOS 7    2024-Jun   2017.3.23
 6415     - Ubuntu 14.04 LTS   2019-Apr   2013.1.13AR.1
 6416     
 6417     The oldest version of ntfs-3g / ntfsprogs on Ubuntu 14.04 LTS includes
 6418     support for the --new-serial option.
 6419     
 6420         $ ntfslabel -V
 6421     
 6422         ntfslabel v2013.1.13AR.1 (libntfs-3g) - Display, or set, the label for an NTFS Volume.
 6423     
 6424         $ ntfslabel --help | grep -- --new-serial
 6425                 --new-serial   Set a new serial number
 6426     
 6427     Therefore it is no longer necessary to check for this option as it is
 6428     always available.  The worst case scenario is that some how an old
 6429     version of ntfslabel is used which doesn't support this option.  In such
 6430     a case GParted goes from not supporting changing the UUID to claiming
 6431     support, but presumably it would fail with an error reporting unknown
 6432     option when applied.  Arguably better from an end user support point of
 6433     view.
 6434 
 6435 2019-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6436 
 6437     Consolidate common if have ntfsresize command conditions
 6438 
 6439 2019-04-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6440 
 6441     Switch to faster ntfsinfo to read NTFS usage (#47)
 6442     
 6443     A user reported GParted was slow to refresh and timing ntfsresize to
 6444     query his file systems found that it was taking 4.7 seconds and 9.2
 6445     seconds for sizes 31.7 GiB and 49 GiB NTFS file systems respectively.
 6446     Almost 14 seconds just to read the usage.
 6447     
 6448     Created a 4 GiB NTFS and filled it with as many 4 KiB files as possible,
 6449     just over 800,000 files.
 6450     
 6451         # df -k /mnt/2
 6452         Filesystem     1K-blocks    Used Available Use% Mounted on
 6453         /dev/sdb2        4194300 4193860       440 100% /mnt/2
 6454         # df -i /mnt/2
 6455         Filesystem     Inodes  IUsed IFree IUse% Mounted on
 6456         /dev/sdb2      819640 808591 11049   99% /mnt/2
 6457     
 6458     Testing perform of ntfsresize:
 6459     
 6460         # time ntfsresize --info --force --no-progress-bar /dev/sdb2 | \
 6461         > egrep 'Current volume size|resize at|Cluster size'
 6462         Cluster size       : 4096 bytes
 6463         Current volume size: 4294963712 bytes (4295 MB)
 6464         You might resize at 4294516736 bytes (freeing 450560 bytes).
 6465     
 6466         real    0m5.231s
 6467         user    0m2.072s
 6468         sys     0m3.014s
 6469     
 6470     Computation of figures:
 6471         Clusters per volume = 4294963712 / 4096 = 1048575.125
 6472         Free clusters = (4294963712 - 4294516736) / 4096 = 109.125
 6473     
 6474     Testing performance of ntfscluster, as used before this commit [1] from
 6475     GParted 0.3 in 2006:
 6476     
 6477         # time ntfscluster --force /dev/sdb2 | \
 6478         > egrep 'bytes per cluster|bytes per volume|clusters per volume|clusters of free space'
 6479         ...
 6480         bytes per cluster       : 4096
 6481         bytes per volume        : 4294963200
 6482         clusters per volume     : 131071
 6483         clusters of free space  : 110
 6484     
 6485         real    0m4.243s
 6486         user    0m1.629s
 6487         sys     0m2.587s
 6488     
 6489     Note that the clusters per volume figure reported by ntfscluster is
 6490     wrong.  4294963200 / 4096 = 1048575, not 131071.
 6491     
 6492     Testing performance using ntfsinfo:
 6493     
 6494         # time ntfsinfo --mft /dev/sdb2 | \
 6495         egrep 'Cluster Size|Volume Size in Clusters|Free Clusters'
 6496                 Cluster Size: 4096
 6497                 Volume Size in Clusters: 1048575
 6498                 Free Clusters: 110 (0.0%)
 6499     
 6500         real    0m0.022s
 6501         user    0m0.012s
 6502         sys     0m0.018s
 6503     
 6504     Repeating the above tests while also using 'btrace /dev/sdb2' and Ctrl-C
 6505     around each test via a separate terminal, reports these numbers of I/Os
 6506     being performed:
 6507       Command      Read requests   Read bytes
 6508     - ntfsresize           2,695     1116 MiB
 6509     - ntfscluster          2,685     1116 MiB
 6510     - ntfsinfo                13     2208 KiB
 6511     No wonder that ntfsresize and ntfscluster take a long time, they read
 6512     just over 1 GiB of data from the 4 GiB file system, where as ntfsinfo
 6513     only reads just over 2 MiB.
 6514     
 6515     Switch to using ntfsinfo to report file system usage.
 6516     
 6517     [1] 9d956594d6acf0d983ae9105df2f3772194a5404
 6518         replaced ntfscluster with ntfsresize (see #350789)
 6519     
 6520     Closes #47 - GParted is slow refreshing NTFS file systems
 6521 
 6522 2019-04-17  Daniel Mustieles <daniel.mustieles@gmail.com>
 6523 
 6524     Updated Spanish translation
 6525 
 6526 2019-04-17  Daniel Mustieles <daniel.mustieles@gmail.com>
 6527 
 6528     Update Spanish translation
 6529 
 6530 2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6531 
 6532     Prefer enum to string comparison in set_partition_type()
 6533 
 6534 2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6535 
 6536     Stop trying unneeded alternative libparted linux-swap names
 6537     
 6538     With that same commit in parted 1.9 [1], libparted only recognised these
 6539     linux-swap names via deprecated aliases:
 6540         linux-swap(old)
 6541         linux-swap(new)
 6542     but does accept this name as a current alias:
 6543         linux-swap
 6544     for:
 6545         linux-swap(v1)
 6546     
 6547     Demonstration:
 6548         # parted -v
 6549         parted (GNU parted) 2.1
 6550         ...
 6551     
 6552         # parted /dev/sdc mkfs yes 1 "linux-swap(new)" unit s print
 6553         ...
 6554         [0] filesys.c:148 (ped_file_system_type_get(): File system alias linux-swap(new) is deprecated
 6555         ...
 6556         Number  Start  End       Size      Type     File system     Flags
 6557          1      2048s  2099199s  2097152s  primary  linux-swap(v1)
 6558     
 6559         # parted /dev/sdc mkfs yes 1 "linux-swap" unit s print
 6560         ...
 6561         Number  Start  End       Size      Type     File system     Flags
 6562          1      2048s  2099199s  2097152s  primary  linux-swap(v1)
 6563     
 6564     Again as GParted now requires libparted 2.2 or later:
 6565     1) Stop using alternative "linux-swap(new)" name as that is deprecated
 6566        by libparted.
 6567     2) Also stop using alternative "linux-swap(v1)" name as that code is
 6568        never used because libparted recognised the GParted "linux-swap"
 6569        name as a current alias.
 6570     
 6571     [1] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=cfafa4394998a11f871a0f8d172b13314f9062c2
 6572         Rationalise linux-swap fs names, and add a "linux-swap" alias
 6573 
 6574 2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6575 
 6576     Stop recognising retired libparted linux-swap names
 6577     
 6578     With this commit in parted 1.8.3 [1], libparted changed from reporting
 6579     the name of Linux swap as:
 6580         linux-swap
 6581     to reporting either:
 6582         linux-swap(old)
 6583         linux-swap(new)
 6584     Later with this commit in parted 1.9 [2], libparted stopped reporting
 6585     those names and reported these instead:
 6586         linux-swap(v0)
 6587         linux-swap(v1)
 6588     
 6589     Demonstration:
 6590         # mkswap /dev/sdc1
 6591         Setting up swapspace version 1, size = 1048572 KiB
 6592         no label, UUID=a2010834-003d-4bf2-9e94-58383fe20a26
 6593         # blkid /dev/sdc1
 6594         /dev/sdc1: UUID="a2010834-003d-4bf2-9e94-58383fe20a26" TYPE="swap"
 6595         # parted -v
 6596         parted (GNU parted) 2.1
 6597         ...
 6598         # parted /dev/sdc unit s print
 6599         ...
 6600         Number  Start  End       Size      Type     File system     Flags
 6601          1      2048s  2099199s  2097152s  primary  linux-swap(v1)
 6602     
 6603     As GParted now requires libparted 2.2 or later [3], remove recognition
 6604     for those no longer libparted reported linux-swap names.  Note that the
 6605     "swap" name is reported by blkid.
 6606     
 6607     [1] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=98a53fd115ca012edf226525b8d4be628454f99e
 6608         Enable support for swsusp partitions, and the ability to
 6609         differentiate between old and new versions of linux-swap partitions.
 6610         Changed the swap_init signature and removed extra ped_geometry_read
 6611         from _swap*_open.
 6612     
 6613     [2] http://git.savannah.gnu.org/cgit/parted.git/commit/?id=cfafa4394998a11f871a0f8d172b13314f9062c2
 6614         Rationalise linux-swap fs names, and add a "linux-swap" alias
 6615     
 6616     [3] 8df975c7d1b5d69897f286bfc5574c51cf58c9d5
 6617         Increase minimum required libparted to 2.2 (!22)
 6618 
 6619 2019-04-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6620 
 6621     Set partition type when formatting to cleared (!36)
 6622     
 6623     Formatting a partition to cleared over the top of LVM2 PV leaves the
 6624     "lvm" flag set on the partition; where as formatting with an actual file
 6625     system over the top of an LVM2 PV clears the "lvm" flag.  This is true
 6626     for both MSDOS and GPT partitioned drives.
 6627     
 6628     Fix by setting the partition type when formatting to cleared too.
 6629     
 6630     Closes !36 - Set partition type when clearing partition contents
 6631 
 6632 2019-04-15  Stas Solovey <whats_up@tut.by>
 6633 
 6634     Update Russian translation
 6635 
 6636 2019-04-14  Piotr Drąg <piotrdrag@gmail.com>
 6637 
 6638     Update Polish translation
 6639 
 6640 2019-04-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6641 
 6642     Remove unnecessary #include from GParted_Core.cc
 6643 
 6644 2019-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6645 
 6646     Rename Dialog_Progress member variable to m_curr_op
 6647     
 6648     Having a member variable named 't' which is used to share state in a
 6649     Dialog_Progress object between on_signal_show() and on_cancel() methods
 6650     is horrible.  Rename to something more meaningful.
 6651     
 6652     Also initialise m_curr_op in the constructor's initialisation list,
 6653     rather than later when first used in on_signal_show().  Not strictly
 6654     required, but avoids this POD (Plain Old Data) member variable being
 6655     undefined in the Dialog_Progress object between construction and when
 6656     on_signal_show() previously assigned to it for the first time and
 6657     started using it.
 6658     
 6659     * C++ FAQ / Should my constructors use "initialization lists" or
 6660       "assignment"?
 6661       https://isocpp.org/wiki/faq/ctors#init-lists
 6662 
 6663 2019-04-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6664 
 6665     Rename for loop counter variables to normative 'i' in Dialog_Progress
 6666     
 6667     Several for loops created counter variable t, hiding member variable of
 6668     the same name.  Rename those loop counter variables to the normative
 6669     name 'i'.
 6670     
 6671     * Why do most of us use 'i' as a loop counter variable?
 6672       https://softwareengineering.stackexchange.com/questions/86904/why-do-most-of-us-use-i-as-a-loop-counter-variable
 6673 
 6674 2019-04-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6675 
 6676     Use CSS to turn off table borders once in saved details HTML
 6677 
 6678 2019-04-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6679 
 6680     Rename method to Dialog_Progress::write_operation_details()
 6681     
 6682     And update comment about replacing '\n' to reflect what the code
 6683     actually does.
 6684 
 6685 2019-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6686 
 6687     Additionally write partition information to saved details (#639176)
 6688     
 6689     Bug 639176 - Save partition layout to gparted_details.htm
 6690 
 6691 2019-04-05  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6692 
 6693     Write starting device overview information to saved details (#639176)
 6694     
 6695     Writes the starting device overview information of all known devices to
 6696     the top of the saved details HTML.  This is so that hopefully we don't
 6697     need to additionally ask users for their disk layouts via 'fdisk -l',
 6698     'parted print' and 'lsblk' when the saved details file is provided.
 6699     
 6700     Also moves the equals separators "==================" from below to
 6701     above each operation so the each section is separated.
 6702     
 6703     Bug 639176 - Save partition layout to gparted_details.htm
 6704 
 6705 2019-03-27  Luca Bacci <luca.bacci982@gmail.com>
 6706 
 6707     Ensure icon sizes (#39)
 6708     
 6709     Some icon themes only provide large icons for stock items.  This can
 6710     cause problems like overly large icons appearing in the GParted UI.
 6711     Found on Kubuntu 16.04 LTS with default breeze icon theme.
 6712     
 6713     Be compatible with these icon themes by forcing scaling of stock icons
 6714     to the requested size.
 6715     
 6716     Icons are used either by Gtk::Image widgets, or Gtk::CellRendererPixbuf
 6717     objects for comboboxes/treeviews.  For Gtk::Image widgets we add
 6718     Utils::mk_image() that constructs Gtk::Image widgets and then sets the
 6719     pixel-size property.  For Gtk::CellRendererPixbuf we add
 6720     Utils::mk_pixbuf() that first loads a Gdk::Pixbuf and then scales if
 6721     needed.
 6722     
 6723     Closes #39 - After GTK3 port icons are too big on KDE
 6724 
 6725 2019-03-31  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6726 
 6727     Update distro specific package installation instructions
 6728     
 6729     - Back in Fedora 22 the distribution switched from using yum to dnf for
 6730       package installation, while CentOS / RHEL continues to use yum.
 6731       Separate out package instructions.
 6732     
 6733     - Update package dependencies for what is required on current versions
 6734       of the documented distributions.
 6735 
 6736 2019-03-31  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6737 
 6738     Also write "Root privileges are required ..." message to stderr (!34)
 6739     
 6740     To further help in diagnosing root authorisation issues by reporting the
 6741     error message to the terminal too.  Also set a failure exit status when
 6742     terminating with this error.
 6743     
 6744     Example:
 6745         $ ./gpartedbin
 6746         GParted 0.33.0-git
 6747         configuration --enable-online-resize
 6748         libparted 3.2
 6749         Root privileges are required for running GParted
 6750         $ echo $?
 6751         1
 6752     
 6753     Closes !34 - Display more version and configuration information
 6754 
 6755 2019-03-31  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6756 
 6757     Print new info before "Root privileges are required ..." dialog (!34)
 6758     
 6759     So that the new version and configuration information is displayed even
 6760     if the gpartedbin executable is run as a non-root user.  To help with
 6761     diagnosing root authorisation issues with the gparted shell wrapper
 6762     script.
 6763     
 6764     Closes !34 - Display more version and configuration information
 6765 
 6766 2019-03-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6767 
 6768     Remove now unused Dialog_Progress::signal_get_libparted_version (!34)
 6769     
 6770     ... and related GParted_Core::get_libparted_version() method.
 6771     
 6772     Closes !34 - Display more version and configuration information
 6773 
 6774 2019-03-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6775 
 6776     Report the same information into saved operation details (!34)
 6777     
 6778     For consistency save the 3 same lines of information into the saved
 6779     operation details.  None of the new 3 lines are subject to translation.
 6780     As this information is really for our benefit when supporting users
 6781     leaving them as English is OK.  Also "GParted" and "Libparted", as
 6782     previously used, are proper nouns so they were never changed as part of
 6783     any language translation.  See with:
 6784         egrep -r '"(GParted|Libparted)"' po/
 6785     
 6786     Closes !34 - Display more version and configuration information
 6787 
 6788 2019-03-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6789 
 6790     Display more version and configuration info to stdout when starting (!34)
 6791     
 6792     So that we might get more information from users when helping them.
 6793     Starting GParted from the command line now looks like this:
 6794         # ./gpartedbin
 6795         GParted 0.33.0-git
 6796         configuration --enable-online-resize
 6797         libparted 3.2
 6798     
 6799     Closes !34 - Display more version and configuration information
 6800 
 6801 2019-03-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6802 
 6803     Rename local variable to meaningful benchmark_copysize
 6804 
 6805 2019-03-29  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6806 
 6807     Stop trying to access device '/dev/mapper/No RAID disks' (#786031)
 6808     
 6809     Running GParted on AltLinux with dmraid installed but with no configured
 6810     RAID arrays produces this error:
 6811         # gparted
 6812         ...
 6813         Could not stat device /dev/mapper/No RAID disks - No such file or directory.
 6814     
 6815     Most distributions use dmraid 1.0.0.rc16 which reports no raid disks
 6816     like this:
 6817         # dmraid -sa -c
 6818         no raid disks
 6819         # echo $?
 6820         1
 6821     
 6822     However AltLinux had the slightly older version, dmraid 1.0.0.rc14,
 6823     which reported no raid disks like this:
 6824         # dmraid -sa -c
 6825         No RAID disks
 6826         # echo $?
 6827         0
 6828     
 6829     So because dmraid 1.0.0.rc14 reported success, exit status 0, and the
 6830     "No RAID disks" message was not in lower case, that text was considered
 6831     a disk device in a DMRaid array.  Fix by checking for "no raid disks" in
 6832     any case.
 6833     
 6834     Bug 786031 - Could not stat device /dev/mapper/No RAID disks - No such
 6835                  file or directory
 6836 
 6837 2019-03-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6838 
 6839     Pass constant parameter by reference to load_operations() (#788814)
 6840     
 6841     It is common C++ practice to pass a constant object by reference to
 6842     avoid constructing a duplicate object for pass by value [1].
 6843     
 6844     [1] How to pass objects to functions in C++?
 6845         https://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/2139254#2139254
 6846     
 6847     Bug 788814 - gparted-0.30.0/include/HBoxOperations.h:37]: performance
 6848                  problem
 6849 
 6850 2019-03-26  Luca Bacci <luca.bacci982@gmail.com>
 6851 
 6852     Always show menu images (!32)
 6853     
 6854     There is a GtkSetting [1] that controls whether images in menus are
 6855     shown or not.  On some distributions / desktops it is enabled by default
 6856     and on others it is disabled by default.  To force show images in menus
 6857     set the 'always-show-image' property to true in Gtk::ImageMenuItems [2].
 6858     
 6859     References:
 6860     
 6861     [1] Gtk3 Reference Documentation - Settings/gtk-menu-images
 6862         https://developer.gnome.org/gtk3/stable/GtkSettings.html#GtkSettings--gtk-menu-images
 6863     
 6864     [2] Gtk3 Reference Documentation - GtkImageMenuItem
 6865         https://developer.gnome.org/gtk3/stable/GtkImageMenuItem.html#gtk-image-menu-item-set-always-show-image
 6866     
 6867     Closes !32 - Always show menu images
 6868 
 6869 2019-03-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6870 
 6871     Drop compose subdir (#46)
 6872     
 6873     It's no longer used so drop it.
 6874     
 6875     Closes #46 - Drop compose subdir
 6876 
 6877 2019-03-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6878 
 6879     Replace String::ucompose() with Glibmm equivalent (#46)
 6880     
 6881     Glibmm has implemented a ustring::compose() set of methods [1] since
 6882     Glibmm 2.16, circa 2008.  So replace String::ucompose().  Note that
 6883     GParted already requires glibmm >= 2.32 as set in configure.ac.
 6884     
 6885     This commit just replaces all the method calls.  Edit created by:
 6886         sed -i 's|String::ucompose *|Glib::ustring::compose|' src/*.cc
 6887     
 6888     [1] Glibmm Reference Manual, Glib::ustring Class, compose() method
 6889         https://developer.gnome.org/glibmm/2.32/classGlib_1_1ustring.html#a64ff7ac3d9e9899c2910f1d831f8d500
 6890     
 6891     Closes #46 - Drop compose subdir
 6892 
 6893 2019-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6894 
 6895     Recognise contribution by Antoine Viallon
 6896 
 6897 2019-03-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6898 
 6899     Raise the maximum F2FS label size to 127 characters (!29)
 6900     
 6901     Fix to make mkfs.f2fs properly handle labels longer than 16 characters
 6902     was included in f2fs-tools 1.2.0 [1].  The oldest supported
 6903     distributions now include this release:
 6904       Distro             EOL        f2fs-tools
 6905     - Debian 8           2020-Jun   1.4.0
 6906     - RHEL / CentOS 7    2024-Jun   1.4.1
 6907     - SLES 12            2027-Oct   Unknown
 6908     - Ubuntu 14.04 LTS   2019-Apr   1.2.0
 6909     
 6910     Note that on Ubuntu 14.04 LTS blkid from util-linux 2.20.1 is too old to
 6911     recognise F2FS file systems, as 2.23 is required for F2FS support [2].
 6912     
 6913     mkfs.f2fs claims the maximum label length is less than 512 characters,
 6914     but actually accepts 512 characters.
 6915     
 6916         # label=`head -c 1024 < /dev/zero | tr '\0' 'A'`
 6917         # mkfs.f2fs -l `echo -n "$label" | cut -c1-513` /dev/sdb10
 6918     
 6919                 F2FS-tools: mkfs.f2fs Ver: 1.4.0 (2014-09-18)
 6920     
 6921         Error: Volume Label should be less than      512 characters
 6922     
 6923         Usage: mkfs.f2fs [options] device [sectors]
 6924         [options]:
 6925           -a heap-based allocation [default:1]
 6926           -d debug level [default:0]
 6927           -e [extension list] e.g. "mp3,gif,mov"
 6928           -l label
 6929           -o overprovision ratio [default:5]
 6930           -s # of segments per section [default:1]
 6931           -z # of sections per zone [default:1]
 6932           -t 0: nodiscard, 1: discard [default:1]
 6933         sectors: number of sectors. [default: determined by device size]
 6934         # echo $?
 6935         1
 6936     
 6937         # mkfs.f2fs -l `echo -n "$label" | cut -c1-512` /dev/sdb10
 6938     
 6939                 F2FS-tools: mkfs.f2fs Ver: 1.4.0 (2014-09-18)
 6940     
 6941         Info: Label = AAAAAAAAAAAA...[trimmed from 512 "A"s]...AAAAAAAAAAAA
 6942         Info: sector size = 512
 6943         Info: total sectors = 1048576 (in 512bytes)
 6944         Info: zone aligned segment0 blkaddr: 256
 6945         Info: Discarding device
 6946         Info: This device doesn't support TRIM
 6947         Info: format successful
 6948         # echo $?
 6949         0
 6950     
 6951         # blkid -V
 6952         blkid from util-linux 2.25.2  (libblkid 2.25.0, 24-Oct-2014)
 6953         # blkid /dev/sdb
 6954         /dev/sdb10: LABEL="AAAAAAAAAAAA...[only 127 "A"s]...AAAAAAAAAAAA"
 6955         UUID="f47f3fdc-dd91-4616-bb6d-0d643a884265" TYPE="f2fs"
 6956         PARTUUID="3bb4bef8-9494-4e82-8dda-5d8edd9c60d9"
 6957     
 6958     As blkid only reports the first 127 characters and is the only command
 6959     used for reading the label of an F2FS file system, use this as the new
 6960     increased limit.
 6961     
 6962     [1] https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=9799d6364dc93e1fd259d812d4a50ed984a6456b
 6963         mkfs: handle labels longer than 16 characters
 6964     
 6965     [2] https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.23/v2.23-ReleaseNotes
 6966         "add Flash-Friendly File System (f2fs) support  [Alejandro Martinez
 6967         Ruiz]"
 6968     
 6969     Closes !29 - Enhance F2FS support
 6970 
 6971 2019-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 6972 
 6973     Drop fsck.f2fs -y option not available before f2fs-tools 1.10.0 (!29)
 6974     
 6975     On CentOS 7 with f2fs-tools 1.4.1, checking an F2FS file system fails
 6976     like this:
 6977         # fsck.f2fs -f -y -a /dev/sdb3
 6978         Info: Force to fix corruption
 6979         fsck.f2fs: invalid option -- 'y'
 6980                 Error: Unknown option ?
 6981     
 6982         Usage: fsck.f2fs [options] device
 6983         [options]:
 6984           -a check/fix potential corruption, reported by f2fs
 6985           -d debug level default:0]
 6986           -f check/fix entire partition
 6987           -t show directory tree [-d -1]
 6988         # echo $?
 6989         1
 6990     
 6991     Turns out that the '-y' option was not available until f2fs-tools 1.10.0
 6992     and is identical to the existing '-f' option anyway [1], which GParted
 6993     already uses.  Just remove the '-y' option passed to fsck.f2fs.
 6994     
 6995     [1] https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=55ee9e7202f84168f868d863da8ed1c4995a0e6d
 6996         fsck.f2fs: add -y for generic fsck
 6997     
 6998     Closes !29 - Enhance F2FS support
 6999 
 7000 2019-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7001 
 7002     Handle missing FS size information before f2fs-tools 1.5.0 (!29)
 7003     
 7004     Before this commit [1] first included in f2fs-tools 1.5.0, dump.f2fs
 7005     didn't report the total space used by the file system.  This causes F2FS
 7006     file system usage not be reported on older distributions, including
 7007     RHEL/CentOS 7 and Debian 8.
 7008     
 7009     On CentOS 7:
 7010         # rpm -q f2fs-tools
 7011         f2fs-tools-1.4.1-2.el7.nux.x86_64
 7012         # dump.f2fs -d 1 /dev/sdb3 | egrep 'sector size =|total.*sectors ='
 7013         Info: sector size = 512
 7014         Info: total sectors = 2097152 (in 512 bytes)
 7015     
 7016     On Fedora 28:
 7017         # rpm -q f2fs-tools
 7018         f2f2-tools-1.10.0-1.fc28.x86_64
 7019         # dump.f2fs -d 1 /dev/sdb2 | egrep -a 'sector size =|total.*sectors ='
 7020         Info: sector size = 512
 7021         Info: total sectors = 3145728 (1536 MB)
 7022         Info: total FS sectors = 2621440 (1280 MB)
 7023     
 7024     "total sectors" reports the size of the partition.
 7025     "total FS sectors" reports the size of the file system.
 7026     
 7027     Cope with the file system size being missing.  Pass -1 as the file
 7028     system size to partition.set_sector_usage() in this case.  Note that
 7029     this means GParted won't be able to detect and report unallocated space
 7030     within the partition when using f2fs-tools < 1.5.0.
 7031     
 7032     [1] https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/commit/?id=fea6162a6db9af527648262d9fbb0335a0cc5460
 7033         fsck.f2fs: show total sectors consumed by filesystem
 7034     
 7035     Closes !29 - Enhance F2FS support
 7036 
 7037 2019-03-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7038 
 7039     Make F2FS usage parsing handle NULs in dump.f2fs output (!29)
 7040     
 7041     On Fedora 28 with f2fs-tools 1.10.0, dump.f2fs is producing NUL
 7042     characters in it's output and this completely breaks the parsing code in
 7043     f2fs::set_used_sectors().  Glib::Regex, as used by
 7044     Utils::regexp_label(), just doesn't match any text after the first NUL
 7045     character from the output.
 7046     
 7047         # dump.f2fs -d 1 /dev/sdb1
 7048         Info: Debug level = 1
 7049         Info: [/dev/sdb1] Disk Model: VBOX HARDDISK   1.0 ^@^@^@^@^@^@^@^...
 7050         Info: Segments per section = 1
 7051         Info: Sections per zone = 1
 7052         Info: sector size = 512
 7053         Info: total sectors = 2097152 (1024 MB)
 7054         ...
 7055     
 7056     Grep thinks the output is binary too:
 7057     
 7058         # dump.f2fs -d 1 /dev/sdb1 | \
 7059         > egrep 'valid_block_count|user_block_count|log_blocksize|sector size =|total FS sectors ='
 7060         Binary file (standard input) matches
 7061     
 7062         # dump.f2fs -d 1 /dev/sdb1 | \
 7063         > egrep --text 'valid_block_count|user_block_count|log_blocksize|sector size =|total FS sectors ='
 7064         Info: sector size = 512
 7065         log_blocksize                           [0x       c : 12]
 7066         Info: total FS sectors = 2097152 (1024 MB)
 7067         user_block_count                        [0x   36400 : 222208]
 7068         valid_block_count                       [0x       2 : 2]
 7069     
 7070     Re-write set_used_sectors() using string find() and sscanf() to be
 7071     similar to how a number of the other set_used_sectors() are written for
 7072     other file systems.
 7073     
 7074     Closes !29 - Enhance F2FS support
 7075 
 7076 2019-03-15  Antoine Viallon <antoine.viallon@gmail.com>
 7077 
 7078     Enhance F2FS support (!29)
 7079     
 7080     - Adds reading of file system usage
 7081     - Adds resize (grow) support
 7082     - Adds verify support
 7083     
 7084     Closes !29 - Enhance F2FS support
 7085 
 7086 2019-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7087 
 7088     Go back to symbolic label widget alignment constants
 7089     
 7090     Now that GParted requires Gtk3 there is no need to use floating point
 7091     numbers for compatibility with Gtk <= 2.22.  Replace with symbolic
 7092     alignment constants.
 7093     
 7094     Relevant commit history:
 7095     
 7096     *   6efa6234012b5fa112af4db08e0b89238d53981a
 7097         Add optional yalign argument to Utils::mk_label() method
 7098     
 7099     *   be2689ad25c104e3cb97e7d5d1f7627dbb137b19
 7100         Stop using deprecated widget alignment enumerators (#652044)
 7101 
 7102 2019-03-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7103 
 7104     Pass message parameters by reference to 2 Partition methods (#788813)
 7105     
 7106     Note that this almost certainly has no performance benefit what so ever
 7107     because the methods are implicitly defined as inline [1][2] and the
 7108     compiler will have simply inlined the method bodies thus avoiding having
 7109     to construct copies of the passed parameters.
 7110     
 7111     Do this anyway as constant objects are typically passed by reference
 7112     [3].  Also C++'s std::vector::push_back() [4] takes a const reference
 7113     parameter so update the kind of equivalent push_back_message() to take
 7114     a const reference parameter too.
 7115     
 7116     [1] C++ reference / inline specifier
 7117         https://en.cppreference.com/w/cpp/language/inline
 7118     
 7119             A function defined entirely inside a class/struct/union
 7120             definition, whether it's a member function or a non-member
 7121             friend function, is implicitly an inline function.
 7122     
 7123     [2] When should I write the keyword 'inline' for a function/method?
 7124         https://stackoverflow.com/questions/1759300/when-should-i-write-the-keyword-inline-for-a-function-method/1759575#1759575
 7125     
 7126     [3] How to pass objects to functions in C++?
 7127         https://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/2139254#2139254
 7128     
 7129     [4] C++ reference / std::vector::push
 7130         https://en.cppreference.com/w/cpp/container/vector/push_back
 7131     
 7132             void push_back(const T& value);
 7133     
 7134     Bug 788813 - gparted-0.30.0/include/Partition.h:137]: performance
 7135                  problem
 7136 
 7137 2019-03-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7138 
 7139     Stop checking for 'btrfs filesystem label' support (!26)
 7140     
 7141     btrfs-progs 3.12 includes 'btrfs filesystem label /dev/PTN NEWLABEL'
 7142     functionality so stop checking for this before enabling setting the
 7143     label.
 7144     
 7145         $ btrfs version
 7146         Btrfs v3.12
 7147         $ btrfs filesystem label --help
 7148         usage: btrfs filesystem label [<device>|<mount_point>] [<newlabel>]
 7149     
 7150             Get or change the label of a filesystem
 7151     
 7152             With one argument, get the label of filesystem on <device>.
 7153             If <newlabel> is passed, set the filesystem label on <newlabel>.
 7154     
 7155         $ echo $?
 7156         0
 7157     
 7158     Worst case scenario is that some how an old version of the btrfs command
 7159     is used which doesn't support the labelling functionality.  Then this
 7160     commit would change GParted from disallowing labelling of a btrfs, to
 7161     allowing it, but presumably it would fail with an error from the btrfs
 7162     command reporting so.  Arguably better from a support point of view.
 7163     
 7164     Closes !26 - Remove support for btrfs-progs < 3.12
 7165 
 7166 2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7167 
 7168     Replace use of deprecated btrfsck (!26)
 7169     
 7170     In btrfs-progs 3.12, btrfsck is a hard link to the multi-tool btrfs
 7171     executable.  When run as 'btrfsck' it just implements 'btrfs check'
 7172     [1][2][3][4].
 7173     
 7174     In btrfs-progs 3.14.2 the btrfsck man page is re-added as a symlink to
 7175     the btrfs-check man page and reports that btrfsck is deprecated [5].
 7176     
 7177     Therefore replace use of 'btrfsck' with 'btrfs check'.
 7178     
 7179     [1] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=fac45410e9a783c187ae83d993d3bf3350d05149
 7180         Btrfs-progs: Rename btrfsck.c -> cmds-check.c
 7181     
 7182     [2] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=5956f752c66d5259bbb17a2dd47ee8c8cc0e5f4f
 7183         Btrfs-progs: add btrfsck functionality to btrfs
 7184     
 7185     [3] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=d5d2046ae3b216af22a8a37c940f2412ba519b6e
 7186         Btrfs-progs: add btrfsck name detection to btrfs
 7187     
 7188     [4] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=e31f6172aa1d6ec5d562f56086819a0f4bc8a914
 7189         btrfs-progs: build btrsfck to keep compatibility
 7190     
 7191     [5] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=fddeecb7d424d5bb1a93a19a5e537057a4a7f597
 7192         btrfs-progs: doc: link btrfsck to btrfs-check
 7193     
 7194     Closes !26 - Remove support for btrfs-progs < 3.12
 7195 
 7196 2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7197 
 7198     Stop using removed btrfsctl (!26)
 7199     
 7200     That commit [1] also removed btrfsctl from btrfs-progs 3.12 so also stop
 7201     using it as a fallback.
 7202     
 7203     [1] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=f243fcd1b2aa55ffadfbcc032c66dedbee56e79e
 7204         Removing btrfsctl, btrfs-vol, btrfs-show
 7205     
 7206     Closes !26 - Remove support for btrfs-progs < 3.12
 7207 
 7208 2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7209 
 7210     Finish removal of btrfs-show (!26)
 7211     
 7212     Remove use of btrfs-show from everywhere else in the btrfs module.
 7213     
 7214     Closes !26 - Remove support for btrfs-progs < 3.12
 7215 
 7216 2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7217 
 7218     Stop using removed btrfs-show to read the label (!26)
 7219     
 7220     This commit [1] from btrfs-progs 3.12 removed the previously deprecated
 7221     programs btrfsctl and btrfs-show.  As btrfs-progs 3.12 is now the
 7222     minimum requirement, remove support for those removed programs.
 7223     
 7224     This commit is just removing the use of btrfs-show as a fallback to read
 7225     the label.
 7226     
 7227     Note that 'btrfs-show /dev/PTN' didn't distinguish between a label of
 7228     "none" and no label.  Hence the logic in btrfs::read_label() to do with
 7229     matching the label "none", or matching the label with or without single
 7230     quotes.  Unfortunately as identified in this commit [2]
 7231     'btrfs filesystem show /dev/PTN' is subject to the same issue, but only
 7232     when the file system is mounted and only for btrfs-progs 3.12.  This was
 7233     fixed by this commit [3] from btrfs-progs 3.14.
 7234     
 7235     [1] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=f243fcd1b2aa55ffadfbcc032c66dedbee56e79e
 7236         Removing btrfsctl, btrfs-vol, btrfs-show
 7237     
 7238     [2] eca732fb0cefe35db76a7ac96145e2004e8eed08
 7239         Update parsing of btrfs filesystem show for the label (#733601)
 7240     
 7241     [3] https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=a156b967ed9bd606afa8dc402451abcf07226c17
 7242         btrfs-progs: make filesystem show by label work
 7243     
 7244     Closes !26 - Remove support for btrfs-progs < 3.12
 7245 
 7246 2019-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7247 
 7248     Remove old workaround for btrfs resizing on Linux < 3.2 (!26)
 7249     
 7250     PATCHSET OVERVIEW
 7251     
 7252     The oldest supported distributions have these versions of the Linux
 7253     kernel and btrfs-progs:
 7254       Distro             EOL        kernel    btrfs-progs
 7255     - RHEL / CentOS 7    2024-Jun   3.10.0    4.9.1
 7256     - Ubuntu 14.04 LTS   2019-Apr   4.4.0     3.12
 7257     - Debian 8           2020-Jun   3.16.0    3.17
 7258     - SLES 12            2027-Oct   3.12.28   3.16
 7259     
 7260     Making the oldest supported packages be kernel 3.10 and btrfs-progs 3.12
 7261     allows the btrfs support code to be simplified by removing backward
 7262     compatibility.
 7263     
 7264     THIS CHANGE
 7265     
 7266     Remove old workaround for ignoring the error when resizing a btrfs to
 7267     the same size on Linux kernel < 3.2.
 7268     
 7269     Also now that only exit status 0 is considered successful from btrfs
 7270     resize, the EXEC_CHECK_STATUS flag to execute_command() can be used,
 7271     rather than having to separately call set_status() afterwards.
 7272     
 7273     Relevant commit history:
 7274     *   11d044dba0c07a5c51843beec6ff38f0c55303d8
 7275         Don't ignore any errors resizing btrfs on Linux >= 3.2 (#669389)
 7276     *   a580abbc30e88cb1895af342d43dcbb98183a9d5
 7277         Use newer btrfs multi-tool control command first
 7278     
 7279     Closes !26 - Remove support for btrfs-progs < 3.12
 7280 
 7281 2019-03-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7282 
 7283     Set title of Resize/Move dialog for an extended partition (#44)
 7284     
 7285     The title has never been set in this case, and defaulted to the name of
 7286     the executable 'gpartedbin'.  Fix this.
 7287     
 7288     Closes #44 - Title not set in Resize/Move dialog for extended partitions
 7289 
 7290 2019-03-03  Trần Ngọc Quân <vnwildman@gmail.com>
 7291 
 7292     Updated Vietnamese translation
 7293     
 7294     Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
 7295 
 7296 2019-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7297 
 7298     Initialise local POD 'launched' variable in show_help()
 7299     
 7300     'launched' local POD (Plain Old Data) variable was left uninitialised,
 7301     but was set in both the try and catch clauses.  Best practice is to
 7302     initialise when defined, so do that instead.  Cosmetic change.
 7303 
 7304 2019-02-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7305 
 7306     Rename Win_GParted method to show_help()
 7307     
 7308     It is not creating a dialog (a pop-up window managed by GParted code
 7309     itself).  It is launching independent yelp program to display the help,
 7310     so remove the "_dialog" from the name to avoid any possible confusion.
 7311 
 7312 2019-02-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7313 
 7314     Restore specific error message on failure to launch yelp
 7315     
 7316     Originally, if the yelp command was not installed, attempting to display
 7317     help produced an error dialog with this message:
 7318         Failed to execute child process "yelp" (No such file or directory)
 7319     
 7320     However since this commit during the Gtk 3 port [1] the error message
 7321     became this less useful one:
 7322         Operation not supported
 7323     
 7324     Two attempts are made to display the GParted Manual, first using
 7325     gtk_show_uri() and second by executing the yelp command directly.  Prior
 7326     to the aforementioned commit [1] both methods returned the failure
 7327     reason using the same 'error' variable.  Hence reported the message
 7328     "Failed to execute child process "yelp" ..." from the second attempt.
 7329     However that commit had to re-code the second method as part of the Gtk
 7330     3 port and use a different error returning mechanism, thus the use of
 7331     different variable 'e'.  But the dialog was left reporting the message
 7332     from the original 'error' variable, thus reporting "Operation not
 7333     supported" message from the first attempt using gtk_show_uri().
 7334     
 7335     Fix by again displaying the message from the second failure into the
 7336     error dialog.  Also make it very clear there are two error returning
 7337     variables by naming them 'error1' and 'error2_msg'.
 7338     
 7339     [1] 2953778a4c0e61d8fe49c7a6d707add8a9eb0634
 7340         port-to-gtk3: Use Gdk::AppLaunchContext to launch yelp (#7)
 7341 
 7342 2019-02-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7343 
 7344     Remove deprecated PKG_NAME from autogen.sh
 7345     
 7346     Use of PKG_NAME is deprecated in GNOME 3 and produced this warning:
 7347     
 7348         $ ./autogen.sh
 7349         /usr/bin/gnome-autogen.sh
 7350         /usr/bin/yelp-build
 7351         ***Warning*** PKG_NAME is deprecated, you may remove it from autogen.sh
 7352         ...
 7353     
 7354     Now that GParted is a GNOME 3 application with GNOME 3 yelp-tools
 7355     managed documentation this is redundant and can be removed.  Previous
 7356     further analysis:
 7357     
 7358         GNOME Bugzilla, Bug 743318, comment 18
 7359         https://bugzilla.gnome.org/show_bug.cgi?id=743318#c18
 7360         "
 7361         PKG_NAME is still used in GNOME 2.28's gnome-autogen.sh in error
 7362         messages.  (GNOME 3's gnome-autogen.sh queries it from configure.ac
 7363         instead of requiring it to be set).
 7364         "
 7365     
 7366     Also confirmed that it makes no difference by running ./autogen.sh with
 7367     and without PKG_NAME being set.  The produced GParted build trees were
 7368     the same.  Therefore the release and executable can't be affected.
 7369 
 7370 2019-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7371 
 7372     Drop now unnecessary editing of xmllint command line in CI tests (!24)
 7373     
 7374     GNOME 3's yelp doesn't use scrollkeeper or the OMF catalog, so the
 7375     constructed Makefile doesn't use xmllint to validate the scrollkeeper
 7376     DTD file.  Therefore remove attempted sed edit of that line which no
 7377     longer exists in the Makefile.
 7378     
 7379     Note that help/Makefile.am's @YELP_HELP_RULES@ automake macro expansion
 7380     comes from /usr/share/aclocal/yelp.m4 [1].
 7381     
 7382     Commit which previously needed to add the sed edit:
 7383         cbb25a2511ec9e355b4dbba288689bbc00b7af65
 7384         Stop xmllint scrollkeeper-omf.dtd fetch failure breaking CI tests (#9)
 7385     
 7386     [1] Yelp > Yelp Tools > yelp.m4
 7387         http://yelp.io/tools/yelp.m4.html
 7388     
 7389     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7390 
 7391 2019-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7392 
 7393     Launch help from GParted using the new GNOME 3 help: prefix (!24)
 7394     
 7395     Update GParted to specify the GParted Manual using the new GNOME 3 way
 7396     with the 'help:' prefix to avoid yelp reporting this error:
 7397         Document Not Found
 7398         The URI 'ghelp:gparted' does not point to a valid page.
 7399     
 7400     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7401 
 7402 2019-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7403 
 7404     Allow GNOME 3 yelp to display the GParted Manual (!24)
 7405     
 7406     Now with GNOME 3 style help installed, running 'yelp help:gparted'
 7407     results in this error being displayed in yelp:
 7408         Page Not Found
 7409         The requested page was not found in the document 'help:gparted'.
 7410     
 7411     Where as running 'yelp help:gparted/gparted' correctly displays the
 7412     GParted Manual.
 7413     
 7414     Fix by renaming the article tag to the default 'index' that yelp is
 7415     expecting when using the new GNOME 3 'help:' prefix.
 7416     
 7417     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7418 
 7419 2019-02-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7420 
 7421     Add use of new GNOME 3 yelp-tools documentation infrastructure (!24)
 7422     
 7423     Second part is to use yelp-tools to build and install the documentation.
 7424     Have to rename the help Manual from help/C/gparted.xml to
 7425     help/C/index.docbook in accordance with this note from the GNOME Goal:
 7426     Port to New Documentation Infrastructure [1]:
 7427         IMPORTANT: If this is for a DocBook document, the top-level DocBook
 7428         file MUST be renamed to index.docbook.  Do a "git mv" and include
 7429         index.docbook in HELP_FILES.
 7430     
 7431     Commits from gucharmap [4] and totem [5], projects which have DocBook
 7432     documentation, making this same change are also useful references.
 7433     
 7434     [1] GNOME Goal: Port To New Documentation Infrastructure
 7435         https://wiki.gnome.org/Initiatives/GnomeGoals/NewDocumentationInfrastructure
 7436     
 7437     [2] Yelp > Yelp Tools > yelp.m4
 7438         http://yelp.io/tools/yelp.m4.html
 7439     
 7440     [3] GNOME application developement overview / User help / Set up your
 7441         build system
 7442         https://developer.gnome.org/platform-overview/stable/dev-help-build.html.en
 7443     
 7444     [4] gucharmap commit "Port to new documentation infrastructure"
 7445         https://gitlab.gnome.org/GNOME/gucharmap/commit/3e1526c0568f0b395fce68f9d9e09431dfcaef35
 7446     
 7447     [5] totem commit "Use new documentation infrastructure"
 7448         https://gitlab.gnome.org/GNOME/totem/commit/59a6bd6064fe7dd047f7b61642aba73e0ba72acf
 7449     
 7450     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7451 
 7452 2019-02-21  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7453 
 7454     Remove use of GNOME 2 gnome-doc-utils documentation infrastructure (!24)
 7455     
 7456     Details of old GNOME 2 gnome-doc-utils:
 7457         Migrating your documentation to gnome-doc-utils
 7458         https://wiki.gnome.org/Projects/GnomeDocUtils/MigrationHowTo
 7459     
 7460     First part is to stop using gnome-doc-utils to build and install the
 7461     documentation.  Also since updating the OMF catalog was only needed for
 7462     GNOME 2 yelp, use of scrollkeeper is completely removed too.
 7463     
 7464     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7465 
 7466 2013-07-31  Jeremy Bicha <jbicha@ubuntu.com>
 7467 
 7468     Fix FDL help link for gnome-desktop 3.5+ (!24)
 7469     
 7470     I generated this by running:
 7471         find ./ -type f -exec sed -i 's/ghelp:fdl/help:fdl/g' {} \;
 7472     
 7473     By updating the translations at the same time, it should be easier on
 7474     the translators as there's no reason to invalidate these strings.
 7475     
 7476     https://bugzilla.gnome.org/show_bug.cgi?id=704634#c8
 7477     
 7478     [Mike Fleetwood: Explain the underlying cause and distro versions.]
 7479     This gnome-desktop commit, first included in version 3.5.5, switched the
 7480     package from using gnome-doc-utils to yelp-tools so changed the
 7481     installed location of the GNU FDL license file from
 7482     /usr/share/gnome/help/fdl/C/fdl.xml to
 7483     /usr/share/help/C/fdl/index.docbook, thus changing the yelp URI from
 7484     'ghelp:fdl' to 'help:fdl':
 7485         https://gitlab.gnome.org/GNOME/gnome-desktop/commit/8b7e059e2c01ec67d8aaf33133e695efae2173f8
 7486         Port to new documentation infrastructure
 7487     
 7488     The oldest supported distributions with Gtk/GNOME 3 all have at least
 7489     3.10, therefore use this fix unconditionally.
 7490     
 7491         Distribution        EOL         Gtk/GNOME 3
 7492         RHEL / CentOS 7     2024-Jun    3.22
 7493         Ubuntu 14.04 LTS    2019-Apr    3.10
 7494         Ubuntu 16.04 LTS    2021-Apr    3.18
 7495         Debian 8            2023-Apr    3.14
 7496         SLES 12             2027-Oct    3.10
 7497     
 7498     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7499 
 7500 2019-02-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7501 
 7502     Remove redundant file help/C/Makefile.am (!24)
 7503     
 7504     The file has been redundant since it was first added [1].  It was never
 7505     listed in configure.ac (or configure.in) in AC_CONFIG_FILES.  Therefore
 7506     autoconf has never produced help/C/Makefile.in and ./configure has never
 7507     produced help/C/Makefile.  Therefore it isn't used during the build and
 7508     install of GParted.  Remove it.
 7509     
 7510     [1] 46ca7c74dca80b4b6ec8f6596832510cdc7f714b
 7511         Added code hooks to prepare for GParted Manual
 7512     
 7513     Closes !24 - Port to GNOME 3 yelp-tools documentation infrastructure
 7514 
 7515 2019-02-28  Kukuh Syafaat <kukuhsyafaat@gnome.org>
 7516 
 7517     Update Indonesian translation
 7518 
 7519 2019-02-26  Nathan Follens <nathan@anche.no>
 7520 
 7521     Update Dutch translation
 7522 
 7523 2019-02-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7524 
 7525     Remove left behind configuration summary lines (!22)
 7526     
 7527     These lines in the final configuration report from ./configure were left
 7528     behind [1] when determination of the underlying definitions were remove.
 7529     So they no longer report 'yes' or 'no' like the other lines in the file
 7530     configuration report.
 7531     
 7532            Need partition table re-read workaround?  :
 7533          Supports large sector sizes (> 512 bytes)?  :
 7534     
 7535     Remove them now.
 7536     
 7537     [1] 8df975c7d1b5d69897f286bfc5574c51cf58c9d5
 7538         Increase minimum required libparted to 2.2 (!22)
 7539     
 7540     Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32
 7541 
 7542 2019-02-01  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7543 
 7544     Remove left behind commented #includes from fat16.cc
 7545     
 7546     According to the GIT history the lines were added by this commit:
 7547         8d808c0b62a8387ba1703a0493746add5785fff5
 7548         gparted-0.3.6 - code recreation from Source Forge
 7549     
 7550     Looking at the SVN history this commit actually fleshed out the
 7551     implementations of fat16::get_label() and fat32::get_label() and added
 7552     the commented #includes:
 7553         https://sourceforge.net/p/gparted/svn/118
 7554         Added read label support for fat16 and fat32 using mtools mlabel command
 7555         2008-02-12
 7556     
 7557     Then this SVN commit moved the mtools temporary file handling code into
 7558     Utils.cc, leaving behind the commented #includes:
 7559         https://sourceforge.net/p/gparted/svn/124
 7560         Added MTools temporary file handling functions
 7561         2008-02-19
 7562     
 7563     Finally this commit removed fat32.cc by merging the code with fat16.cc:
 7564         519af1a7c08667c53e602012e2a49cbf5301f40c
 7565         Combine duplicate code for fat16/32
 7566     
 7567     So remove the left behind commented #includes from fat16.cc.
 7568 
 7569 2019-02-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7570 
 7571     Enable online resizing of extended partitions (!23)
 7572     
 7573     A forum user had a case where they wanted to grow their in use root,
 7574     ext4 file system.  GParted supports this, but the partition was a
 7575     logical partition inside an extended partition and GParted doesn't
 7576     support resizing an extended partition while any contained logical
 7577     partitions are busy.
 7578     
 7579     Example layout:
 7580     
 7581         Partition              File System   Mount Point
 7582         /dev/sdb1              ntfs
 7583         /dev/sdb2     [busy]
 7584             /dev/sdb5 [busy]   ext4          /
 7585         unallocated            unallocated
 7586     
 7587     So just allow extended partitions to be resized online when online
 7588     partition resizing is available via libparted.
 7589     
 7590     NOTE:
 7591     The block device that the Linux kernel provides for an extended
 7592     partition just maps to the first 1 KiB of the extended partition where
 7593     the Extended Boot Record is stored, and does not include any of the
 7594     contained logical partitions.  Therefore no application can care that
 7595     the extended partition is resized while a logical partition is in use
 7596     because it can't use the extended partition block device to access any
 7597     data.
 7598     
 7599     The on disk layout looks like this:
 7600     
 7601         # fdisk -l /dev/sdb
 7602     
 7603         Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors
 7604         Units = sectors of 1 * 512 = 512 bytes
 7605         Sector size (logical/physical): 512 bytes / 512 bytes
 7606         I/O size (minimum/optimal): 512 bytes / 512 bytes
 7607         Disk label type: dos
 7608         Disk identifier: 0x0007650e
 7609     
 7610            Device Boot      Start         End      Blocks   Id  System
 7611         /dev/sdb1            2048     1050623      524288    7  HPFS/NTFS/exFAT
 7612         /dev/sdb2         1050624     2101247      525312    5  Extended
 7613         /dev/sdb5         1052672     2101247      524288   83  Linux
 7614     
 7615         # parted /dev/sdb unit s print free
 7616         Model: ATA VBOX HARDDISK (scsi)
 7617         Disk /dev/sdb: 16777216s
 7618         Sector size (logical/physical): 512B/512B
 7619         Partition Table: msdos
 7620         Disk Flags:
 7621     
 7622         Number  Start     End        Size       Type      File system  Flags
 7623                 63s       2047s      1985s                Free Space
 7624          1      2048s     1050623s   1048576s   primary   ntfs
 7625          2      1050624s  2101247s   1050624s   extended
 7626          5      1052672s  2101247s   1048576s   logical   ext4
 7627                 2101248s  16777215s  14675968s            Free Space
 7628     
 7629     The kernel's partition sizes from /sys/block/sdb/sdb${N}/{start,size}
 7630     shows extended partition 2 has a size of only 2 sectors:
 7631     
 7632         # for N in 1 2 5
 7633         > do
 7634         > echo -e "/dev/sdb${N}\tstart=`cat /sys/block/sdb/sdb${N}/start`\tsize=`cat /sys/block/sdb/sdb${N}/size`"
 7635         > done
 7636         /dev/sdb1       start=2048      size=1048576
 7637         /dev/sdb2       start=1050624   size=2
 7638         /dev/sdb5       start=1052672   size=1048576
 7639     
 7640     The EBR read from the whole of extended partition 2 block device:
 7641     
 7642         # hexdump -C /dev/sdb2
 7643         00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 7644         *
 7645         000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 86  |................|
 7646         000001c0  06 41 83 cb 09 82 00 08  00 00 00 00 10 00 00 00  |.A..............|
 7647         000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 7648         *
 7649         000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
 7650         00000200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 7651         *
 7652         00000400
 7653     
 7654     Closes !23 - Enable online resizing of extended partitions
 7655 
 7656 2019-02-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 7657 
 7658     Recognise contribution by Luca Bacci
 7659 
 7660 2019-01-22  Luca Bacci <luca.bacci982@gmail.com>
 7661 
 7662     Prevent the legend text making the features dialog too wide (#7)
 7663     
 7664     With the Gtk3 port the File System Support dialog has become too wide
 7665     because the legend text is no longer wrapped.  Set the max-width-chars
 7666     property to specify the natural size of the widget in terms of
 7667     characters [1].  It is converted to pixels using the average character
 7668     width in the current font.
 7669     
 7670     Also use PACK_EXPAND_WIDGET when adding the label to the box so that if
 7671     the dialog is resized extra space is used to increase the size of this
 7672     child widget [2].
 7673     
 7674     [1] GNOME HowDoI / Labels
 7675         https://wiki.gnome.org/HowDoI/Labels
 7676     
 7677     [2] Gtkmm 3.0 Enums and Flags, enum Gtk::PackOptions
 7678         "PACK_EXPAND_WIDGET  Space is expanded, with extra space filled by
 7679         increasing the child widget size."
 7680         https://developer.gnome.org/gtkmm/3.0/group__gtkmmEnums.html#ga83727a1b6fed51566dfd5c8e58890dba
 7681     
 7682     Closes #7 - Port to Gtk3
 7683 
 7684 2019-01-22  Luca Bacci <luca.bacci982@gmail.com>
 7685 
 7686     Enable display of progress bar text when applying operations (#7)
 7687     
 7688     In Gtk2 progress bars show optional text superimposed over the bar.  In
 7689     Gtk3 the text is not displayed by default, so set the show-text property
 7690     to re-enable this [1].
 7691     
 7692     Also note that since Gtk 3.14.0 the optional text is not superimposed
 7693     over the progress bar, but instead displayed just above it [2][3][4].
 7694     
 7695     References:
 7696     
 7697     [1] Gtkmm 3.0 Gtk::ProgressBar Class Reference, set_show_text()
 7698         "Sets whether the progressbar will show text superimposed over the
 7699         bar."
 7700         https://developer.gnome.org/gtkmm/3.0/classGtk_1_1ProgressBar.html#a0bfa6042f5d4b3509967abc2d8af57fe
 7701     
 7702     [2] Commit - Update the design for progress bars
 7703         https://gitlab.gnome.org/GNOME/gtk/commit/74405cc964e405ea00cfac22856a62fea5ec648e
 7704     
 7705     [3] Bug 748784 - GtkProgressBar text cannot be superimposed on the
 7706         progress bar
 7707         https://bugzilla.gnome.org/show_bug.cgi?id=748784
 7708     
 7709     [4] Gtkmm 3.18 Gtk:ProgressBar Class Reference, set_show_text()
 7710         "Set whether the progress bar will show text next to the bar."
 7711         https://developer.gnome.org/gtkmm/3.18/classGtk_1_1ProgressBar.html#a0bfa6042f5d4b3509967abc2d8af57fe
 7712     
 7713     Closes #7 - Port to Gtk3
 7714 
 7715 2019-01-22  Luca Bacci <luca.bacci982@gmail.com>
 7716 
 7717     Ensure SpinButtons have space to display 7 digits (#7)
 7718     
 7719     In Gtk2 the up and down buttons in a SpinButton were smaller leaving
 7720     space for 7 digits before scrolling the entry.  In Gtk3 the up and down
 7721     buttons are much larger leaving only space for 4 digits.  This occurs in
 7722     the SpinButtons in the Dialog_Base_Partition class as displayed in the
 7723     New Partition, Paste and Resize/Move dialogs.
 7724     
 7725     Set width-chars property of all Gtk::SpinButtons to ensure 7 digits can
 7726     be displayed before scrolling the entry.
 7727     
 7728     Closes #7 - Port to Gtk3
 7729 
 7730 2019-01-22  Luca Bacci <luca.bacci982@gmail.com>
 7731 
 7732     Change Gtk::ProgressBar appearance by providing custom CSS (#7)
 7733     
 7734     In Gtk3 the progress bar height is fixed and defined by the CSS theme in
 7735     use.  Changing the widget allocation size does nothing, it is always
 7736     rendered the same way.
 7737     
 7738     In many themes, including Adwaita, the progressbar is very, very thin.
 7739     Provide custom CSS to specify a height of 8 pixels.
 7740     
 7741     The CSS source string has to be differentiated for Gtk pre and post
 7742     3.20, because Gtk 3.20 introduced some breaking changes in the way CSS
 7743     is handled.
 7744     
 7745     References:
 7746     
 7747     [1] Migrating from GTK+ 2.x to GTK+ 3 - Parsing of custom resources
 7748         https://developer.gnome.org/gtk3/stable/gtk-migrating-GtkStyleContext-parsing.html
 7749     
 7750     [2] Gtk3 Reference Documentation - Changes in GTK+ 3.20
 7751         https://developer.gnome.org/gtk3/stable/ch32s10.html
 7752     
 7753     [3] Gnome/HowDoI - Custom Style
 7754         https://wiki.gnome.org/HowDoI/CustomStyle
 7755     
 7756     Closes #7 - Port to Gtk3
 7757 
 7758 2018-08-28  Luca Bacci <luca.bacci982@gmail.com>
 7759 
 7760     Change packing of pulsebar in statusbar (#7)
 7761     
 7762     The pulsebar looks very small and needs to be widened.  The pulsebar is
 7763     packed inside the statusbar so that it displays activity text on the
 7764     left side and the pulsebar on the right side.  Ideally we want the space
 7765     to be evenly divided for the textual messages and for the pulsebar
 7766     activity indicator.
 7767     
 7768     For this we just have to set the 'homogeneous' property to TRUE for the
 7769     statusbar (note that GtkStatusBar inherits from GtkBox).
 7770     
 7771     Also vertically align the pulsebar to the center of the statusbar.  This
 7772     is achieved setting the 'valign' property to Gtk::ALIGN_CENTER for the
 7773     pulsebar widget.
 7774     
 7775     Closes #7 - Port to Gtk3
 7776 
 7777 2018-08-30  Luca Bacci <luca.bacci982@gmail.com>
 7778 
 7779     Work around Gtk3 Gtk-CRITICAL messages when closing some dialogs (#7)
 7780     
 7781     There is a bug affecting Gtk+ 3.22.8 to 3.22.30 in which destroying a
 7782     GtkComboBox when it is not hidden results in this message:
 7783     
 7784         Gtk-CRITICAL **: gtk_widget_is_drawable: assertion 'GTK_IS_WIDGET (widget)' failed
 7785     
 7786     This happens in GParted when some dialogs are closed, for example the
 7787     Create New Partition and Create Partition Table dialogs.  To work around
 7788     the issue we call Gtk::Dialog::hide() in the destructors of our dialog
 7789     classes.
 7790     
 7791     The issue was fixed in Gtk 3.24.0.
 7792     
 7793      * Gtk 3.22.8 was released in February 2017.
 7794      * Gtk 3.24.0 was released in September 2018.
 7795     
 7796     References:
 7797     
 7798     [1] Gtk Issue - GtkComboBox::private::popup_window can be NULL
 7799         https://gitlab.gnome.org/GNOME/gtk/issues/125
 7800     
 7801     [2] Gtk commit - combobox: popdown() the menu during unmap()
 7802         https://gitlab.gnome.org/GNOME/gtk/commit/7401794de6b084fea469af297b7c144724b8492c
 7803     
 7804     [3] Gtk commit - Check for NULL priv->popup_window in
 7805         gtk_combo_box_popdown()
 7806         https://gitlab.gnome.org/GNOME/gtk/commit/aa5d926c843aca2af576c38cf25ebdb4d3da2c26
 7807     
 7808     Closes #7 - Port to Gtk3
 7809 
 7810 2018-11-21  Luca Bacci <luca.bacci982@gmail.com>
 7811 
 7812     Work around Gtkmm3 issue where menu accelerators are not shown (#7)
 7813     
 7814     There is a bug in Gtkmm3 when setting accelerator keys on a
 7815     Gtk::MenuItem, the accelerator keys work but are not displayed when the
 7816     menu is drawn.  This happens for Gtk::MenuItems, including derived
 7817     objects, that are constructed with a non-default constructor.
 7818     
 7819     All non-default constructors of Gtk::MenuItem, and subclasses, work by
 7820     creating themselves a Gtk::AccelLabel and packing it inside the menu
 7821     item.  But in Gtk3 GtkMenuItem are created with a GtkAccelLabel already
 7822     packed in as a child and that accel label should be used instead.
 7823     
 7824     To workaround the issue we only use the default constructor for
 7825     Gtk::MenuItem and subclasses.  This is easy to do because we only have
 7826     to change the wrappers in MenuHelpers.cc.
 7827     
 7828     This bug affects Gtkmm version 3.0.0 to 3.22.2 and was fixed in
 7829     Gtkmm 3.22.3.
 7830     
 7831      * Gtkmm 3.0.0 was released in April 2011
 7832      * Gtkmm 3.22.3 was released in November 2018
 7833     
 7834     References:
 7835     
 7836     [1] Bug Report on the Gtkmm mailing list
 7837         https://mail.gnome.org/archives/gtkmm-list/2018-February/msg00006.html
 7838     
 7839     [2] Commit - Gtk::MenuItem: Fix add_accel_label()
 7840         https://gitlab.gnome.org/GNOME/gtkmm/commit/e5c8c2df67d0d7ec255055984e8f07d0f0fa0862
 7841     
 7842     Closes #7 - Port to Gtk3
 7843 
 7844 2018-08-13  Luca Bacci <luca.bacci982@gmail.com>
 7845 
 7846     Simplify code using Gtk::Container::get_children() (#7)
 7847     
 7848     GParted uses Gtk::Container::get_children().  In Gtkmm2
 7849     Gtk::Container::get_children() returns a Glibmm intermediate container
 7850     [1].  Gtkmm3 dropped the use of Glibmm intermediate containers in favour
 7851     of STL containers [2][3].
 7852     
 7853     Now that Gtk::Container::get_children() directly returns a std::vector<>
 7854     simplify the code.
 7855     
 7856     References:
 7857     
 7858     [1] Gtkmm 2.24 Gtk::Container Class Reference
 7859         "Glib::ListHandle<Widget*> Gtk::Container::get_children()"
 7860         https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Container.html#acd2f9b9ac16ba96178d3f5169b07f4d0
 7861     
 7862     [2] Gtkmm 3.0 Gtk::Container Class Reference
 7863         "std::vector<Widget*> Gtk::Container::get_children()"
 7864         https://developer.gnome.org/gtkmm/3.0/classGtk_1_1Container.html#a3a2111e255cb5b72bd91a3be087cff27
 7865     
 7866     [1] Programming with gtkmm3 / Changes in gtkmm3
 7867         "11. We now use std::vector in several methods instead of the
 7868         intermediate *Handle types to make the API clearer."
 7869         https://developer.gnome.org/gtkmm-tutorial/3.0/changes-gtkmm3.html.en
 7870     
 7871     Closes #7 - Port to Gtk3
 7872 
 7873 2018-09-05  Luca Bacci <luca.bacci982@gmail.com>
 7874 
 7875     port-to-gtk3: Block Gtk::TreeSelection changed handler on tree model clear (#7)
 7876     
 7877     Now GParted compiles with Gtkmm3, but we get a failed assertion doing
 7878     the following:
 7879      * Select a device with more than 1 partition
 7880      * Select a partition
 7881      * Activate 'Refresh Devices' (or do any operation that causes it, like
 7882        mount/unmount etc.)
 7883     
 7884     This is the failed assertion:
 7885         **
 7886         ERROR:Win_GParted.cc:1152:void GParted::Win_GParted::set_valid_operations(): assertion failed: (valid_display_partition_ptr( selected_partition_ptr ))
 7887         Aborted (core dumped)
 7888     
 7889     Where is the problem?
 7890     
 7891     Win_GParted::Refresh_Visual() calls TreeView_Detail::load_partitions()
 7892     to clear and refill the treeview.
 7893     
 7894     The problem is in GParted::TreeView_Detail::load_partitions() at
 7895     TreeView_Detail.cc:91:
 7896         treestore_detail->clear();
 7897     
 7898     This activates TreeView_Detail::on_selection_changed() which in turn
 7899     activates Win_GParted::on_partition_selected() passing an old, stale
 7900     pointer as an argument.  This triggers the failed assertion.
 7901     
 7902     Why does this happen with Gtk3 and not with Gtk2?
 7903     
 7904     First a bit of background of GtkTreeView:
 7905     
 7906     What happens to the selection in a GtkTreeView when the selected row
 7907     is removed?
 7908     
 7909     With Gtk2 the selection simply becomes empty, so nothing is selected
 7910     afterwards.  With Gtk3 this was changed [1] and selection moves to an
 7911     adjacent row.
 7912     
 7913     gtk_tree_store_clear() removes rows one by one.  While removing rows the
 7914     selection changed signal is emitted.  With Gtk2 it is emitted only one
 7915     time, to indicate that selection has become empty.  With Gtk3 it is
 7916     instead emitted several times, each time indicating that selection has
 7917     moved to the adjacent row.
 7918     
 7919     The handler TreeView_Detail::on_selection_changed() only takes action
 7920     when the selection is not empty.  So with Gtk3 it really takes action
 7921     and activates Win_GParted::on_partition_selected() with a pointer to old
 7922     data.
 7923     
 7924     What's the purpose of TreeView_Detail::on_selection_changed()?
 7925     
 7926     Its task is to update the selection in the drawing area above the
 7927     TreeViewDetail, the DrawingAreaVisualDisk, so that the selected
 7928     partition stays in sync on the two widgets.
 7929     
 7930     Fix by blocking the signal handler during the treeview clear.
 7931     
 7932     Reference:
 7933     [1] Commit - treeview: Handle the case where the cursor row gets deleted
 7934         https://gitlab.gnome.org/GNOME/gtk/commit/1a2932ba2915c34171581a85afba39311e9c3ac6
 7935     
 7936     Closes #7 - Port to Gtk3
 7937 
 7938 2018-08-09  Luca Bacci <luca.bacci982@gmail.com>
 7939 
 7940     port-to-gtk3: Use Gdk::AppLaunchContext to launch yelp (#7)
 7941     
 7942     gdk_spawn_command_line_on_screen() is not present in Gtk3.  The
 7943     documentation from Gtkmm 2.24 states [1]:
 7944     
 7945         gdk_spawn_command_line_on_screen has been deprecated since version
 7946         2.24 and should not be used in newly-written code.  This function is
 7947         being removed in 3.0.  Use either g_spawn_command_line_sync(),
 7948         g_spawn_command_line_async() or GdkAppLaunchContext instead.
 7949     
 7950     g_spawn_command_line_sync() and g_spawn_command_line_async() are screen
 7951     / display agnostic, as such we would loose functionality.  There is a
 7952     workaround, which involves setting the DISPLAY environment variable [2],
 7953     but it's a weak solution (and I don't know if it works on backends
 7954     other than X11).
 7955     
 7956     GdkAppLaunchContext is an implementation of GIO's GAppLaunchContext that
 7957     handles launching an application in a graphical context [3].  Therefore
 7958     use GdkAppLaunchContext and GIO's GAppInfo.
 7959     
 7960     GdkAppLaunchContext was introduced in Gtk2 version 2.14.  The C++
 7961     wrapper Gdk::AppLaunchContext was introduced only in Gtkmm3 version 3.4
 7962     [4].  Bump the minimum required version of Gtkmm to 3.4.0 for this
 7963     requirement.
 7964     
 7965     GAppInfo was introduced in GLib version 2.16.  The C++ wrapper
 7966     Gio::AppInfo was introduced in Giomm version 2.16.  Note that the
 7967     minimum required version for glibmm is already 2.32.
 7968     
 7969     [1] GDK 2 Reference Manual, GdkScreen, gdk_spawn_on_screen()
 7970         https://developer.gnome.org/gdk2/2.24/GdkScreen.html#gdk-spawn-on-screen
 7971     
 7972     [2] Migrating from GTK+ 2.x to GTK+ 3 - "Use GIO for launching applications"
 7973         https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.7
 7974     
 7975     [3] GDK 3 Reference Manual - "Application launching"
 7976         https://developer.gnome.org/gdk3/stable/gdk3-Application-launching.html
 7977     
 7978     [4] Gtkmm 3.4 Gdk::AppLaunchContext Class Reference, Detailed Description
 7979         https://developer.gnome.org/gtkmm/3.4/classGdk_1_1AppLaunchContext.html#details
 7980     
 7981     Closes #7 - Port to Gtk3
 7982 
 7983 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 7984 
 7985     port-to-gtk3: Use Gtk::CellLayout::get_cells() (#7)
 7986     
 7987     GParted uses Gtk::TreeViewColumn::get_cell_renderers().  This is not
 7988     present in Gtkmm3.  Now Gtk::TreeViewColumn inherits from
 7989     Gtk::CellLayout and we have to use Gtk::CellLayout::get_cells() instead.
 7990     
 7991     GtkCellLayout was introduced in Gtk2 version 2.18 as the common
 7992     interface for containers of cell renderers.
 7993     
 7994     The C++ wrapper Gtk::CellLayout was introduced in Gtkmm2 version 2.18,
 7995     but Gtk::TreeViewColumn was never made to inherit from Gtk::CellLayout
 7996     to avoid breaking the API / ABI.  That change was made for Gtkmm3.
 7997     
 7998     This is an excerpt from gtkmm/treeviewcolumn.h header in Gtkmm2:
 7999       // TODO: Should be deprecated, but we cannot derive from CellLayout
 8000       // without breaking API and ABI.
 8001     
 8002       /** Returns a list of all the cell renderers in the column,
 8003        * in no particular order.
 8004        *
 8005        * @return A list of Gtk::CellRenderers.
 8006        */
 8007       Glib::ListHandle<CellRenderer*> get_cell_renderers();
 8008     
 8009     Replace Gtk::TreeViewColumn::get_cell_renderers() with base class
 8010     method Gtk::CellLayout::get_cells().
 8011     
 8012     Reference:
 8013     
 8014     [1] Commit - "Deprecate get_cell_renderers implementations"
 8015         https://gitlab.gnome.org/GNOME/gtk/commit/6abc52a29d2b15c255ada7d199b703a95f8c565b
 8016     
 8017     Closes #7 - Port to Gtk3
 8018 
 8019 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8020 
 8021     port-to-gtk3: Use draw signal in the partition resizer (#7)
 8022     
 8023     In Gtk2 widgets draw themselves in response to the expose event signal.
 8024     In Gtk3 widgets draw themselves in response to the GtkWidget::draw
 8025     signal, and the signal handler gets a Cairo context as an argument.
 8026     
 8027     Convert Gtk::DrawingArea rendering code to respond to the
 8028     GtkWidget::draw signal.
 8029     
 8030     This commit is specific to the drawing area in the Create new Partition
 8031     dialog and the Resize/Move dialog.
 8032     
 8033     Reference:
 8034     
 8035     [1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
 8036         https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11
 8037     
 8038     Closes #7 - Port to Gtk3
 8039 
 8040 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8041 
 8042     port-to-gtk3: Use draw signal in the partition visualizer (#7)
 8043     
 8044     In Gtk2 widgets draw themselves in response to the expose event signal.
 8045     In Gtk3 widgets draw themselves in response to the GtkWidget::draw
 8046     signal, and the signal handler gets a Cairo context as an argument.
 8047     
 8048     Convert Gtk::DrawingArea rendering code to respond to the
 8049     GtkWidget::draw signal.
 8050     
 8051     This commit is specific to the drawing area contained in the main
 8052     application window (also called the DrawingAreaVisualDisk).
 8053     
 8054     Reference:
 8055     
 8056     [1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
 8057         https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11
 8058     
 8059     Closes #7 - Port to Gtk3
 8060 
 8061 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8062 
 8063     port-to-gtk3: Use draw signal in the partition info dialog (#7)
 8064     
 8065     In Gtk2 widgets draw themselves in response to the expose event signal.
 8066     In Gtk3 widgets draw themselves in response to the GtkWidget::draw
 8067     signal, and the signal handler gets a Cairo context as an argument.
 8068     
 8069     Convert Gtk::DrawingArea rendering code to respond to the
 8070     GtkWidget::draw signal.
 8071     
 8072     This commit is specific to the drawing area in the Partition Info
 8073     dialog.
 8074     
 8075     Reference:
 8076     
 8077     [1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
 8078         https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11
 8079     
 8080     Closes #7 - Port to Gtk3
 8081 
 8082 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8083 
 8084     port-to-gtk3: Use Gtk::Widget::render_icon_pixbuf() (#7)
 8085     
 8086     In Gtk3/C, gtk_widget_render_icon() was deprecated in Gtk 3.0 [1].  In
 8087     Gtkmm3/C++, Gtk::Widget::render_icon() was abruptly removed from Gtkmm
 8088     3.0 and replaced with Gtk::Widget::render_icon_pixbuf() [2].
 8089     
 8090     Gtk::Widget::render_icon() [3] had an optional 3rd parameter which
 8091     GParted never used.  Replace with Gtk::Widget::render_icon_pixbuf() [4].
 8092     
 8093     References:
 8094     
 8095     [1] GTK+ 3 Reference Manual, GtkWidget
 8096         https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-render-icon
 8097         "gtk_widget_render_icon has been deprecated since version 3.0 and
 8098         should not be used in newly-written code."
 8099     
 8100     [2] Gtkmm 3.0.0 NEWS file
 8101         "... Removed render_icon(), adding render_icon_pixbuf()."
 8102         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.0.0/NEWS#L187
 8103     
 8104     [3] Gtkmm 2.24 Gtk::Widget Class Reference, render_icon()
 8105         https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Widget.html#a91efd1b5aed7c184506ddd5721710584
 8106     
 8107     [4] Gtkmm 3.0 Gtk::Widget Class Reference, render_icon_pixbuf()
 8108         https://developer.gnome.org/gtkmm/3.0/classGtk_1_1Widget.html#a28bbbd0c1717e58343df56f7f422b106
 8109     
 8110     Closes #7 - Port to Gtk3
 8111 
 8112 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8113 
 8114     port-to-gtk3: Use Gdk::Cursor via Glib::RefPtr<> (#7)
 8115     
 8116     Starting from Gtkmm3 Gdk::Cursor objects cannot be constructed directly,
 8117     but instead you have to get a smart pointer to an instance by calling
 8118     the static member function Gdk::Cursor::create().
 8119     
 8120     Gdk::Cursor::create() returns a Glib::RefPtr<Gdk::Cursor> object.
 8121     
 8122     Gtkmm3 always uses Glib::RefPtr<Gdk::Cursor> in its interface and never
 8123     plain Gdk::Cursor.
 8124     
 8125     Reference:
 8126     
 8127     [1] Programming with gtkmm3, Changes in gtkmm3:
 8128         https://developer.gnome.org/gtkmm-tutorial/3.24/changes-gtkmm3.html.en
 8129         "... Gdk::Cursor are now used via Glib::RefPtr."
 8130     
 8131     Closes #7 - Port to Gtk3
 8132 
 8133 2018-08-29  Luca Bacci <luca.bacci982@gmail.com>
 8134 
 8135     port-to-gtk3: Rework Gtk header includes (#7)
 8136     
 8137     In Gtk3 individual headers cannot be included directly in application
 8138     code, only the header <gtk/gtk.h> can be included (with a few exceptions
 8139     for some platform specific headers).
 8140     
 8141     This has always been considered good practice even for Gtk2, though was
 8142     not a hard requirement.
 8143     
 8144     In Gtk3 this is enforced by preprocessor checks.  Failure to do so
 8145     yields a preprocessor error and compilation fails:
 8146     
 8147       "error: Only <gtk/gtk.h> can be included directly."
 8148     
 8149     Change specific Gtk header includes to:
 8150     
 8151       #include <gtk/gtk.h>
 8152     
 8153     References:
 8154     
 8155     [1] Migrating from GTK+ 2.x to GTK+ 3 - "Do not include individual headers"
 8156         https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.3
 8157     
 8158     [2] Commit - "Remove all traces of GDK_PIXBUF/GTK_DISABLE_SINGLE_INCLUDES"
 8159         https://gitlab.gnome.org/GNOME/gtk/commit/5e29973773d4e2177f234675cc2a2b2016aa9fbc
 8160     
 8161     Closes #7 - Port to Gtk3
 8162 
 8163 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8164 
 8165     port-to-gtk3: Rework Gtkmm header includes (#7)
 8166     
 8167     Now that we are compiling against Gtkmm3 there are missing declarations
 8168     of Gtkmm identifiers due to changes in Gtkmm internal header structure.
 8169     
 8170     All we have to do is bring back the declarations by including the
 8171     appropriate headers where needed.
 8172     
 8173     Add necessary Gtkmm header includes.
 8174     
 8175     Closes #7 - Port to Gtk3
 8176 
 8177 2018-12-04  Luca Bacci <luca.bacci982@gmail.com>
 8178 
 8179     port-to-gtk3: Rework Glibmm header includes (#7)
 8180     
 8181     Now that we are compiling against Gtkmm3 there are missing declarations
 8182     of Glibmm identifiers due to changes in Gtkmm internal header structure.
 8183     
 8184     All we have to do is bring back the declarations by including the
 8185     appropriate headers where needed.
 8186     
 8187     Add necessary Glibmm header includes.
 8188     
 8189     Closes #7 - Port to Gtk3
 8190 
 8191 2018-08-27  Luca Bacci <luca.bacci982@gmail.com>
 8192 
 8193     port-to-gtk3: Switch to Gtkmm3 (#7)
 8194     
 8195     Switch to Gtkmm3 in configure.ac.  Require version 3.0.0.
 8196     
 8197     Also update the build instructions in README and the package list in
 8198     .gitlab-ci.yml.
 8199     
 8200     Starting from version 3.18.0 Gtkmm requires C++11 compilation [1][2][3].
 8201     Add a check for Gtkmm >= 3.18.0 in configure.ac and enable C++11
 8202     compilation accordingly.
 8203     
 8204     References:
 8205     
 8206     [1] Gtkmm 3.18.1 NEWS
 8207         "Changes in 3.18 ... Use, and require C++11, ..."
 8208         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.18.1/NEWS#L35
 8209     
 8210     [2] Murray's Blog - "gtkmm now uses C++11"
 8211         https://www.murrayc.com/permalink/2015/07/31/gtkmm-now-uses-c11
 8212     
 8213     [3] Murray's Blog - "gtkmm 3.18 and glibmm 2.46"
 8214         https://www.murrayc.com/permalink/2015/09/25/gtkmm-3-18-and-glibmm-2-46
 8215     
 8216     Closes #7 - Port to Gtk3
 8217 
 8218 2018-08-09  Luca Bacci <luca.bacci982@gmail.com>
 8219 
 8220     prepare-for-gtk3: Prepare for removal of Gtk::Widget::modify_fg() (#7)
 8221     
 8222     The Gtk::Widget::modify_fs() API was removed in Gtkmm3 [1] and also
 8223     there is no direct replacement.  GParted uses this in one place.  So
 8224     instead use the C gtk_widget_modify_fg() version that is still present
 8225     in Gtk3.
 8226     
 8227     This is just a temporary change to port GParted to Gtk3.  In future this
 8228     will be replaced as part of the switch from Gdk::Color to Gtk::RGBA,
 8229     since Gdk::Color was deprecated in Gtkmm 3.10 [2].
 8230     
 8231     Reference:
 8232     
 8233     [1] https://gitlab.gnome.org/GNOME/gtkmm/commit/ee432e21901c8ee7f68f6562c46f9e5e6ef17de7
 8234         commit message "... Remove the modify_*() methods, ..."
 8235     
 8236     [2] Gtkmm 3.10 Gdk::Color Class Reference
 8237         https://developer.gnome.org/gtkmm/3.10/classGdk_1_1Color.html#details
 8238             Deprecated:
 8239             Use Gdk::RGBA instead.
 8240     
 8241     Closes #7 - Port to Gtk3
 8242 
 8243 2018-08-02  Luca Bacci <luca.bacci982@gmail.com>
 8244 
 8245     prepare-for-gtk3: Prepare for removal of Gtk::Menu_Helpers::MenuList (#7)
 8246     
 8247     GParted uses Gtk::Menu_Helpers::MenuList helper class to access
 8248     individual menu items.  This helper class made it easy to navigate menu
 8249     items by index.
 8250     
 8251     Gtk::Menu_Helpers::MenuList was removed in the switch from Gtkmm2 to
 8252     Gtkmm3 [1].  Instead, use a separate std::map<Gtk::MenuItem*> to keep
 8253     track of individual Gtk::MenuItem objects.
 8254     
 8255     Reference:
 8256     [1] Gtkmm 3 commit "MenuShell: Remove items()." removed the code
 8257         https://gitlab.gnome.org/GNOME/gtkmm/commit/c8e47b0db5505db0e10e74ce1d7286c2230958b5
 8258     
 8259     Closes #7 - Port to Gtk3
 8260 
 8261 2018-07-31  Luca Bacci <luca.bacci982@gmail.com>
 8262 
 8263     prepare-for-gtk3: Prepare for removal of Gtk::Menu_Helpers::Element (#7)
 8264     
 8265     Gtk::Menu_Helpers::Element class and subclasses help in Gtk::MenuItem
 8266     widgets and also automate tasks like registering keyboard accelerators
 8267     when parented to a top-level window [1][2].
 8268     
 8269     Gtk::Menu_Helpers::Element class and subclasses were removed in Gtkmm3
 8270     [3].  Provide compatible implementations under the namespace
 8271     GParted::Menu_Helpers.
 8272     
 8273     References:
 8274     
 8275     [1] gtkmm: Gtk::Menu_Helpers Namespace Reference
 8276         https://developer.gnome.org/gtkmm/2.24/namespaceGtk_1_1Menu__Helpers.html
 8277     
 8278     [2] gtkmm: Gtk::Menu_Helpers::Element Class Reference
 8279         https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Menu__Helpers_1_1Element.html
 8280     
 8281     [3] Gtkmm 3 commit "MenuShell: Remove items()." removed the code
 8282         https://gitlab.gnome.org/GNOME/gtkmm/commit/c8e47b0db5505db0e10e74ce1d7286c2230958b5
 8283     
 8284     Closes #7 - Port to Gtk3
 8285 
 8286 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8287 
 8288     prepare-for-gtk3: Replace deprecated GDK_<KeyName> constants (#7)
 8289     
 8290     During the switch from Gtk2 to Gtk3 keyname constants were renamed from
 8291     GDK_<KeyName> to GDK_KEY_<KeyName> [1].  This was done to avoid name
 8292     clashes in gobject-introspection and language bindings.  The new
 8293     constant names were also backported to Gtk 2.22 [2].
 8294     
 8295     Make use of the new constant names.
 8296     
 8297     References:
 8298     [1] Migrating from GTK+ 2.x to GTK+ 3 - "Replace GDK_<keyname> with GDK_KEY_<keyname>"
 8299         https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.6
 8300     
 8301     [2] Commit - "gdk: Prefix keys with _KEY by default"
 8302         https://gitlab.gnome.org/GNOME/gtk/commit/750c81f43dda6c783372b983e630ecd30b776d7e
 8303     
 8304     Closes #7 - Port to Gtk3
 8305 
 8306 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8307 
 8308     prepare-for-gtk3: Remove calls to Gtk::Dialog::set_has_separator() (#7)
 8309     
 8310     Originally in Gtk2, by default, dialogs showed a horizontal separator
 8311     between the content area and the action area (buttons).  GParted
 8312     explicitly called Gtk::Dialog::set_has_separator(false) for all it's
 8313     dialogs to remove the separator.
 8314     
 8315     In Gtk2/Gtkmm2 2.22, separators were deprecated [1].  In Gtk3/Gtkmm3
 8316     separators in dialogs were removed altogether, including all the related
 8317     APIs [2][3][4].  Therefore remove all calls.
 8318     
 8319     References:
 8320     [1] Commit - "Document separator-related api in GtkDialog as deprecated"
 8321         https://gitlab.gnome.org/GNOME/gtk/commit/6f6650e6cff06ff7c7e70db634ab10510a80c04c
 8322     
 8323     [2] Commit - "Remove separators from dialogs"
 8324         https://gitlab.gnome.org/GNOME/gtk/commit/d433a606111d89727530f71d7b956ba40655bcbf
 8325     
 8326     [3] GTK+ 3.0.0 NEWS file
 8327         https://gitlab.gnome.org/GNOME/gtk/blob/3.0.0/NEWS#L779
 8328         "
 8329         Overview of Changed from GTK+ 2.90.6 to 2.90.7
 8330         ==============================================
 8331     
 8332         * Various deprecated APIs have been removed:
 8333         ...
 8334         - GtkDialog separators, including the GtkDialog::has-separator
 8335           property, including setter/getter, the GTK_DIALOG_NO_SEPARATOR
 8336           flag and the GtkMessageDialog::use-separator style property
 8337         "
 8338     
 8339     [4] Gtkmm 3.0.0 NEWS file
 8340         https://gitlab.gnome.org/GNOME/gtkmm/blob/3.0.0/NEWS#406
 8341         "
 8342         * Dialog:
 8343         - Remove get/set_has_separator() and property.
 8344         - Constructors: Remove use_separator parameters.
 8345         "
 8346     
 8347     Closes #7 - Port to Gtk3
 8348 
 8349 2019-01-28  Balázs Úr <balazs@urbalazs.hu>
 8350 
 8351     Update Hungarian translation
 8352 
 8353 2019-01-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8354 
 8355     Update to Google Test 1.8.1
 8356     
 8357     Update to Google Test C++ test framework from release 1.8.0 to 1.8.1.
 8358     Replace the following files and directories from Google Test 1.8.1:
 8359         LICENSE
 8360         README.md
 8361         include/
 8362         src/
 8363     Note the LICENSE file is identical, where as the other files changed.
 8364     
 8365     Also see commit which initially added Google Test:
 8366         87f7170a55e1a04aeca5412ebb97e0fe0bfe7b4c
 8367         Add Google Test 1.8.0 files (#781978)
 8368 
 8369 2019-01-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8370 
 8371     Remove custom main() from test_PipeCapture (!22)
 8372     
 8373     After removing Glib::thread_init() from test_PipeCapture's main() all it
 8374     does is exactly what the built in Google Test main() does [1][2].  So
 8375     use that instead like the other unit test programs do.
 8376     
 8377     [1] Google Test, Primer, Writing the main() Function
 8378         https://github.com/google/googletest/blob/master/googletest/docs/primer.md#writing-the-main-function
 8379     
 8380     [2] Google Test 1.8.0, gtest_main.cc::main()
 8381         file: lib/gtest/src/gtest_main.cc
 8382         https://github.com/google/googletest/blob/release-1.8.0/googletest/src/gtest_main.cc#L34
 8383     
 8384     Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32
 8385 
 8386 2018-12-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8387 
 8388     Remove deprecated Glib::thread_init() (!22)
 8389     
 8390     Use of Glib::thread_init() was deprecated in glibmm 2.32 [1].  The
 8391     oldest supported distributions have these versions:
 8392         Debian 8           glibmm 2.42.0
 8393         RHEL / CentOS 7    glibmm 2.56.0
 8394         SLES 12            glibmm 2.38.1
 8395         Ubuntu 14.04 LTS   glibmm 2.39.93
 8396     
 8397     Checking further the glibmm 2.32 reference manual says this about
 8398     Glib::thread_init() [2]:
 8399         Initializes the GLib thread system.
 8400     
 8401         Deprecated:
 8402         Calling thread_init() is no longer necessary and no longer has any
 8403         effect.
 8404     
 8405     However only some of the glibmm example programs had Glib::thread_init()
 8406     removed, others had it replaced by Glib::init() [3].  Again the glibmm
 8407     2.32 reference manual says this about Glib::init() [4]:
 8408         Initialize glibmm.
 8409     
 8410         You may call this more than once.  You do not need to call this if
 8411         you are using Glib::MainLoop or Gtk::Main, because they call it for
 8412         you.
 8413     
 8414     GParted does call Gtk::Main and test_PipeCapture does call
 8415     Glib::MainLoop.  Therefore just raise the minimum version to glibmm 2.32
 8416     and remove both calls to Glib::thread_init().
 8417     
 8418     [1] Glibmm 2.32 NEWS file
 8419         https://gitlab.gnome.org/GNOME/glibmm/blob/2.32.0/NEWS#L207
 8420     
 8421     [2] glibmm 2.32, glibmm: Glib Namespace Reference, Glib::thread_init()
 8422         https://developer.gnome.org/glibmm/2.32/namespaceGlib.html#ab26d01c776801f1fff00753e97af4fc7
 8423     
 8424     [3] glibmm commit "Avoid use of deprecates API in tests and examples."
 8425         https://gitlab.gnome.org/GNOME/glibmm/commit/3e0fbb22c0d4814de4174d32e12a45cbad79980e
 8426     
 8427     [4] glibmm 2.32, glibmm: Glib Namespace Reference, Glib::init()
 8428         https://developer.gnome.org/glibmm/2.32/namespaceGlib.html#ac90aee10d0b90e3d8a96a86b5394f87b
 8429     
 8430     Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32
 8431 
 8432 2018-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8433 
 8434     Increase minimum required libparted to 2.2 (!22)
 8435     
 8436     Raise the minimum required version of GNU Parted from 1.7.1 to 2.2,
 8437     released 2010-02-16 [1][2].  The oldest supported distributions, also
 8438     with gtkmm >= 2.24, since commit [3], are:
 8439         Debian 8           parted 3.2
 8440         RHEL / CentOS 7    parted 3.1
 8441         SLES 12            parted 3.1
 8442         Ubuntu 14.04 LTS   parted 2.3
 8443     
 8444     Raising the minimum required version allows removal of optional code
 8445     associated with these definitions:
 8446     *   USE_LIBPARTED_LARGE_SECTOR_SUPPORT
 8447         Fallback code reporting ignored device with logical sector size
 8448         other than 512 bytes.
 8449     *   ENABLE_PT_REREAD_WORKAROUND
 8450         Fallback code re-attempting to inform the kernel of partition
 8451         changes.
 8452     
 8453     [1] GNU Parted 2.2 release announcement
 8454         http://lists.gnu.org/archive/html/info-gnu/2010-02/msg00016.html
 8455     
 8456     [2] NEWS file from GNU Parted 2.2
 8457         http://git.savannah.gnu.org/cgit/parted.git/tree/NEWS?h=v2.2
 8458     
 8459     [3] 8b42bab1eea572a2a43e99e3d86fe93920675599
 8460         modern-gtk2: Require Gtkmm version 2.24 (!17)
 8461     
 8462     Closes !22 - Increase minimums to libparted 2.2 and glibmm 2.32
 8463 
 8464 2019-01-20  Carmen Bianca BAKKER <carmen@carmenbianca.eu>
 8465 
 8466     Update Esperanto translation
 8467 
 8468 2019-01-02  Anders Jonsson <anders.jonsson@norsjovallen.se>
 8469 
 8470     Update Swedish translation
 8471 
 8472 2018-12-28  Yuras Shumovich <shumovichy@gmail.com>
 8473 
 8474     Add Belarusian translation
 8475 
 8476 2018-12-13  Curtis Gedak <gedakc@gmail.com>
 8477 
 8478     Update name typo in NEWS file
 8479 
 8480 2018-12-13  Curtis Gedak <gedakc@gmail.com>
 8481 
 8482     Append -git to version for continuing development
 8483 
 8484 2018-12-13  Curtis Gedak <gedakc@gmail.com>
 8485 
 8486     ==========   gparted-0.33.0   ==========
 8487 
 8488 2018-12-11  Milo Casagrande <milo@ubuntu.com>
 8489 
 8490     Update Italian translation
 8491 
 8492 2018-12-09  Baurzhan Muftakhidinov <baurthefirst@gmail.com>
 8493 
 8494     Update Kazakh translation
 8495 
 8496 2018-12-06  Daniel Șerbănescu <daniel@serbanescu.dk>
 8497 
 8498     Update Romanian translation
 8499 
 8500 2018-12-06  Daniel Șerbănescu <daniel@serbanescu.dk>
 8501 
 8502     Update Romanian translation
 8503 
 8504 2018-12-05  Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>
 8505 
 8506     Update Esperanto translation
 8507 
 8508 2018-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8509 
 8510     Strip unnecessary scope from GParted::STAT_* (!20)
 8511     
 8512     The code inconsistently uses GParted:: scope in front of STAT_*.
 8513     
 8514         $ fgrep 'GParted::STAT_' src/*.cc | wc -l
 8515         3
 8516         $ egrep '[^:]STAT_' src/*.cc | wc -l
 8517         41
 8518     
 8519     GParted:: scope resolution is unnecessary as all the code is inside the
 8520     GParted scope, except for main().  So remove it.
 8521     
 8522     Closes !20 - Minor namespace and scope operator tidy-ups
 8523 
 8524 2018-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8525 
 8526     Strip unnecessary scope from GParted::TYPE_* (!20)
 8527     
 8528     The code inconsistently uses GParted:: scope in front of TYPE_*.
 8529     
 8530         $ fgrep 'GParted::TYPE_' src/*.cc | wc -l
 8531         35
 8532         $ egrep '[^:]TYPE_' src/*.cc | wc -l
 8533         83
 8534     
 8535     GParted:: scope resolution is unnecessary as all the code is inside the
 8536     GParted scope, except for main().  So remove it.
 8537     
 8538     Closes !20 - Minor namespace and scope operator tidy-ups
 8539 
 8540 2018-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8541 
 8542     Strip unnecessary scope from GParted::FS_* (!20)
 8543     
 8544     The code inconsistently uses GParted:: scope in front of FS_*.
 8545     
 8546         $ fgrep 'GParted::FS_' src/*.cc | wc -l
 8547         41
 8548         $ egrep '[^:]FS_' src/*.cc | wc -l
 8549         441
 8550     
 8551     GParted:: scope resolution is unnecessary as all the code is inside the
 8552     GParted namespace, except for main().  So remove it.
 8553     
 8554     Closes !20 - Minor namespace and scope operator tidy-ups
 8555 
 8556 2018-10-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8557 
 8558     Strip unnecessary scope from GParted::FS::* (!20)
 8559     
 8560     The code inconsistency uses GParted::FS::* and FS::*.
 8561     
 8562         $ fgrep 'GParted::FS::' src/*.cc | wc -l
 8563         97
 8564         $ egrep '[^:]FS::' src/*.cc | wc -l
 8565         152
 8566     
 8567     GParted:: scope resolution is unnecessary as all the code is inside the
 8568     GParted namespace, except for main().  So remove it.
 8569     
 8570     Closes !20 - Minor namespace and scope operator tidy-ups
 8571 
 8572 2018-11-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8573 
 8574     Put Frame_Resizer_{Base,Extended} modules into GParted namespace (!20)
 8575     
 8576     All the other modules are in the GParted namespace, except for main()
 8577     which has to be in the global namespace, so put these in the GParted
 8578     namespace too.
 8579     
 8580     Closes !20 - Minor namespace and scope operator tidy-ups
 8581 
 8582 2018-11-25  Aurimas Černius <aurisc4@gmail.com>
 8583 
 8584     Updated Lithuanian translation
 8585 
 8586 2018-11-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8587 
 8588     Fix false usage figures for busy SWRAID members (#27)
 8589     
 8590     Create an active Linux Software RAID member which is larger than /dev
 8591     virtual file system and GParted will report the usage figure of the /dev
 8592     virtual file system for the SWRAID member.
 8593     
 8594         # df -h /dev
 8595         Filesystem      Size  Used Avail Use% Mounted on
 8596         devtmpfs        732M     0  732M   0% /dev
 8597         # sgdisk -n 1:1M:+1G /dev/sdb
 8598         # mdadm --create --verbose /dev/md1 --level=linear --raid-devices=1 --force /dev/sdb1
 8599         mdadm: Defaulting to version 1.2 metadata
 8600         mdadm: array /dev/md1 started.
 8601     
 8602     GParted reports the usage of /dev/sdb1 as:
 8603         Partition  Mount Point  Size     Used   Unused     Unallocated
 8604         /dev/sdb1  /dev/md1     1.00GiB  0.00B  731.04MiB  292.96MiB
 8605     
 8606     However GParted should have reported the usage as "---" for unknown
 8607     because it isn't coded to query the size of the SWRAID member within a
 8608     partition.
 8609     
 8610     The fault has been bisected to this commit:
 8611         Extend un/mounting and usage reporting to unsupported file systems (!13)
 8612         95903efb1f284f3d6819f38e894dc6c3464b2183
 8613     
 8614     What happens for busy Linux Software RAID array members:
 8615     *   GParted_Core::is_busy()
 8616         has custom code to identify busy members.
 8617     *   GParted_Core::set_mountpoints()
 8618         has custom code to add the array device name as the "mount point" of
 8619         the member.
 8620     *   GParted_Core::set_used_sectors()
 8621         falls into the else not a supported file system (because SWRAID
 8622         doesn't have a derived FileSystem implementation class).
 8623     *   GParted_Core::mounted_set_used_sectors()
 8624         is called to get the file system usage of mounted, but unsupported
 8625         file systems, such as UFS and any others.
 8626     *   Utils::get_mounted_filesystem_usage()
 8627         is called which queries the kernel using statvfs() and gets the file
 8628         system usage of the /dev virtual file system because the array
 8629         device name will always start /dev.
 8630     
 8631     Fix by ensuring that GParted only asks the kernel for the usage of paths
 8632     which it knows are mount points of mounted file systems.  (As read from
 8633     /proc/mounts and cached in the Mount_Info module).  Also rename the
 8634     method, by inserting "_fs", to mounted_fs_set_used_sectors() to remind
 8635     us that it is for mounted *file systems* only.
 8636     
 8637     Closes #27 - GParted may report incorrect usage for SWRAID partitions
 8638                  instead of unknown
 8639     
 8640     S
 8641 
 8642 2018-10-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8643 
 8644     Recognise contribution by Luca Bacci
 8645 
 8646 2018-08-02  Luca Bacci <luca.bacci982@gmail.com>
 8647 
 8648     modern-gtk2: Use Cairo for drawing the partition visualizer (!17)
 8649     
 8650     Third commit in a series to convert Gdk::GC based drawing to Cairo based
 8651     drawing.  This specific commit makes the transition for the graphical
 8652     partition visualizer widget that is used in the main application window.
 8653     
 8654     Closed !17 - Gtk2 modernisation
 8655 
 8656 2018-08-02  Luca Bacci <luca.bacci982@gmail.com>
 8657 
 8658     modern-gtk2: Use Cairo for drawing the partition info (!17)
 8659     
 8660     Second commit in a series to convert Gdk::GC based drawing to Cairo
 8661     based drawing.  This specific commit makes the transition for the
 8662     graphical partition info widget that is used in the "Information about"
 8663     dialog.
 8664     
 8665     Closes !17 - Gtk2 modernisation
 8666 
 8667 2018-08-02  Luca Bacci <luca.bacci982@gmail.com>
 8668 
 8669     modern-gtk2: Use Cairo for drawing the partition resizer (!17)
 8670     
 8671     GdkGC has been deprecated in the underlying C / GTK+ 2.22 library.  It
 8672     is less clearly stated but Gdk::GC is also deprecated in C++ / gtkmm.
 8673     Cairo based rendering should be used instead.
 8674     https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html
 8675     https://gitlab.gnome.org/GNOME/gtk/blob/2.22.0/NEWS#L124
 8676     https://developer.gnome.org/gtkmm/2.24/classGdk_1_1GC.html
 8677     
 8678     First commit in a series to convert Gdk::GC based drawing to Cairo based
 8679     drawing.  This specific commit makes the transition for the graphical
 8680     partition resizing widget that is used in the "Create New Partition",
 8681     "Paste" creating new partition and "Resize/Move" dialogs.
 8682     
 8683     Cairo is not pixel based but instead uses a continuous coordinate space.
 8684     To draw in a pixel aligned way follow the guidance in the Cairo FAQ.
 8685     https://www.cairographics.org/FAQ/#sharp_lines
 8686     
 8687     Additional references:
 8688     https://developer.gnome.org/gdk2/stable/gdk2-Drawing-Primitives.html#gdk-draw-line
 8689     https://developer.gnome.org/gdk2/stable/gdk2-Drawing-Primitives.html#gdk-draw-rectangle
 8690     
 8691     Closes !17 - Gtk2 modernisation
 8692 
 8693 2018-10-27  Luca Bacci <luca.bacci982@gmail.com>
 8694 
 8695     modern-gtk2: Delay construction of Gtk::TreeModel* objects (!17)
 8696     
 8697     C++ initialises static member variables before main() is called.
 8698     Therefore the static members of:
 8699         struct Slots
 8700         {
 8701             static Gtk::TreeModelColumn<Glib::ustring> text;
 8702             static Gtk::TreeModelColumn<bool> sensitive;
 8703         private:
 8704             static Gtk::TreeModel::ColumnRecord record_;
 8705         };
 8706     are constructed before Gtk::Main() is called in main().  However the
 8707     Gtkmm documentation specifically says that they must be constructed
 8708     afterwards [1].
 8709     
 8710     Resolve this by using the Construct On First Use Idiom [2] to delay
 8711     initialisation until the slots are first used.  Normally this idiom uses
 8712     static local objects, however it is being applied to class static
 8713     objects here because the objects are accessed in many methods.  The
 8714     downside of this approach is that the objects are never destructed,
 8715     which memory analysers like Valgrind could see as a memory leak, but
 8716     that is actually deliberate.  That leak can be removed once we can use
 8717     C++11 and std::unique_ptr.
 8718     
 8719     [1] gtkmm: Gtk::TreeModelColumnRecord Class Reference
 8720         https://developer.gnome.org/gtkmm/2.24/classGtk_1_1TreeModelColumnRecord.html#details
 8721     
 8722         "Neither TreeModel::ColumnRecord nor the TreeModelColumns contain
 8723         any real data - they merely describe what C++ type is stored in
 8724         which column of a TreeModel, and save you from having to repeat that
 8725         type information in several places.
 8726     
 8727         Thus TreeModel::ColumnRecord can be made a singleton (as long as you
 8728         make sure it's instantiated after Gtk::Main), even when creating
 8729         multiple models from it.
 8730         "
 8731     
 8732     [2] C++ FAQ / How do I prevent the "static initialization order
 8733         problem"?
 8734         https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use
 8735     
 8736     Closes !17 - Gtk2 modernisation
 8737 
 8738 2018-08-03  Luca Bacci <luca.bacci982@gmail.com>
 8739 
 8740     modern-gtk2: Rename callback after OptionComboBox class switch (!17)
 8741     
 8742     Final part in a series of commits to replace Gtk::OptionMenu widgets
 8743     with GParted::OptionComboBox.
 8744     
 8745     This specific commit renames the signal handler callback to match the
 8746     previously renamed combobox widget variable names.
 8747     
 8748     Closes !17 - Gtk2 modernisation
 8749 
 8750 2018-07-31  Luca Bacci <luca.bacci982@gmail.com>
 8751 
 8752     modern-gtk2: Use OptionComboBox class for file system combobox (!17)
 8753     
 8754     Third part in a series of commits to replace Gtk::OptionMenu widgets
 8755     with GParted::OptionComboBox.
 8756     
 8757     This specific commit is about file system combobox.
 8758     
 8759     Closes !17 - Gtk2 modernisation
 8760 
 8761 2018-07-31  Luca Bacci <luca.bacci982@gmail.com>
 8762 
 8763     modern-gtk2: Use OptionComboBox class for partition type combobox (!17)
 8764     
 8765     Second part in a series of commits to replace Gtk::OptionMenu widgets
 8766     with GParted::OptionComboBox.
 8767     
 8768     This specific commit is about partition type combobox.
 8769     
 8770     Closes !17 - Gtk2 modernisation
 8771 
 8772 2018-07-31  Luca Bacci <luca.bacci982@gmail.com>
 8773 
 8774     modern-gtk2: Use OptionComboBox class for alignment combobox (!17)
 8775     
 8776     First part in a series of commits to replace Gtk::OptionMenu widgets
 8777     with GParted::OptionComboBox.
 8778     
 8779     This specific commit is about partition alignment combobox.
 8780     
 8781     Closes !17 - Gtk2 modernisation
 8782 
 8783 2018-07-30  Luca Bacci <luca.bacci982@gmail.com>
 8784 
 8785     modern-gtk2: Introduce OptionComboBox class (!17)
 8786     
 8787     Gtk::OptionMenu is a combobox type widget that is constructed from a
 8788     Gtk::Menu rather than a Gtk::TreeModel.  However Gtk::OptionMenu was
 8789     deprecated in gtkmm 2.4.1.
 8790     
 8791     In GParted the Gtk::OptionMenu widget is used for:
 8792     - partition alignment combobox
 8793     - partition type combobox
 8794     - file system combobox
 8795     
 8796     While they consist only of text we cannot use Gtk::ComboBoxText because
 8797     it doesn't expose functionality in its interface to make items inactive.
 8798     
 8799     Create OptionComboBox helper class that builds a combobox consisting of
 8800     only text items, much like Gtk::ComboBoxText, but has the added
 8801     functionality to set items as inactive.
 8802     
 8803     References:
 8804     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1OptionMenu.html#details
 8805     https://gitlab.gnome.org/GNOME/gtkmm/blob/GTKMM_2_10_1/ChangeLog#L3515
 8806     https://gitlab.gnome.org/GNOME/gtkmm/commit/bba503b0473413e474d9b6d297226479d29fd47f
 8807     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1ComboBoxText.html
 8808     
 8809     Closes !17 - Gtk2 modernisation
 8810 
 8811 2018-08-13  Luca Bacci <luca.bacci982@gmail.com>
 8812 
 8813     modern-gtk2: Use Gtk::Widget::set_tooltip_text() (!17)
 8814     
 8815     GParted was using Gtk::Tooltips widgets for tooltips, but they were
 8816     deprecated in gtkmm 2.12 in favour of Gtk::Tooltip widgets.  (Note the
 8817     spelling difference, with and without a trailing 's').
 8818     
 8819     As GParted's tooltips are all text only continue to use the shortcut,
 8820     which is now Gtk::Widget::set_tooltip_text().
 8821     
 8822     References:
 8823     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Tooltips.html#details
 8824     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Tooltip.html#details
 8825     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.20.0/NEWS#L740
 8826     
 8827     Closes !17 - Gtk2 modernisation
 8828 
 8829 2018-08-13  Luca Bacci <luca.bacci982@gmail.com>
 8830 
 8831     modern-gtk2: Use Gtk::MenuItem::unset_submenu() (!17)
 8832     
 8833     Gtk::MenuItem::remove_submenu() was deprecated in gtkmm 2.12.  Replace
 8834     with Gtk::MenuItem::unset_submenu() introduced in gtkmm 2.22.
 8835     
 8836     References:
 8837     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1MenuItem.html
 8838     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L24
 8839     
 8840     Closes !17 - Gtk2 modernisation
 8841 
 8842 2018-08-11  Luca Bacci <luca.bacci982@gmail.com>
 8843 
 8844     modern-gtk2: Use Gtk::AboutDialog::set_program_name() (!17)
 8845     
 8846     Gtk::AboutDialog::set_name() was deprecated in gtkmm 2.12.  Replace with
 8847     Gtk::AboutDialog::set_program_name().
 8848     
 8849     References:
 8850     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1AboutDialog.html
 8851     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.20.0/NEWS#L741
 8852     
 8853     Closes !17 - Gtk2 modernisation
 8854 
 8855 2018-08-10  Luca Bacci <luca.bacci982@gmail.com>
 8856 
 8857     modern-gtk2: Use Gtk::AlignmentEnum::ALIGN_START (!17)
 8858     
 8859     Gtkmm 2.22 deprecated Gtk::AlignmentEnum::ALIGN_{LEFT,RIGHT,TOP,BOTTOM}
 8860     replacing with Gtk::AlignmentEnum::ALIGN_{START,END}.
 8861     
 8862     References:
 8863     https://developer.gnome.org/gtkmm/2.24/group__gtkmmEnums.html#ga98983d4e80f67ffa5148dd554706ffac
 8864     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L14
 8865     
 8866     Closes !17 - Gtk2 modernisation
 8867 
 8868 2018-08-10  Luca Bacci <luca.bacci982@gmail.com>
 8869 
 8870     modern-gtk2: Use Gtk::TreeView::Column::get_first_cell() (!17)
 8871     
 8872     Gtk::TreeView::Column::get_first_cell_renderer() was deprecated in
 8873     gtkmm 2.24.  Replace with Gtk::TreeView::Column::get_first_cell().
 8874     
 8875     References:
 8876     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1TreeViewColumn.html
 8877     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.24.0/NEWS#L64
 8878     
 8879     Closes !17 - Gtk2 modernisation
 8880 
 8881 2018-08-10  Luca Bacci <luca.bacci982@gmail.com>
 8882 
 8883     modern-gtk2: Use Gtk::ComboBoxText::append() (!17)
 8884     
 8885     Gtk::ComboBoxText::append_text() was deprecated in gtkmm 2.24.  Replace
 8886     with Gtk::ComboBoxText::append().
 8887     
 8888     References:
 8889     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1ComboBoxText.html
 8890     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.24.0/NEWS#L20
 8891     
 8892     Closes !17 - Gtk2 modernisation
 8893 
 8894 2018-08-27  Luca Bacci <luca.bacci982@gmail.com>
 8895 
 8896     modern-gtk2: Always use Gtk::MessageDialog::get_message_area() (!17)
 8897     
 8898     Remove check for Gtk::Messagedialog::get_message_area() and associated
 8899     fallback code as it is always available from gtkmm 2.22.
 8900     
 8901     Reference:
 8902     https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L25
 8903     
 8904     Closes !17 - Gtk2 modernisation
 8905 
 8906 2018-08-26  Luca Bacci <luca.bacci982@gmail.com>
 8907 
 8908     modern-gtk2: Require Gtkmm version 2.24 (!17)
 8909     
 8910     Require the latest minor version of gtkmm2, released back in 2011 [1].
 8911     This is the first step in porting to Gtk3 [2].  This drops GParted
 8912     support for very old but still supported distributions:
 8913         Distribution      EOL        Gtkmm
 8914         RHEL / CentOS 6   2020-Nov   2.18.2
 8915         SLES 11           2022-Mar   2.14.1
 8916     
 8917     References:
 8918     [1] ANNOUNCE: gtkmm 2.24.0
 8919         https://mail.gnome.org/archives/gtkmm-list/2011-February/msg00038.html
 8920     [2] Migrating from GTK+ 2.x to GTK+ 3 / Preparation in GTK+ 2.x
 8921         https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3
 8922     
 8923     Closes !17 - Gtk2 modernisation
 8924 
 8925 2018-08-27  Luca Bacci <luca.bacci982@gmail.com>
 8926 
 8927     Use Gtk::Viewport wrapper class
 8928     
 8929     There is a GtkViewport wrapper class in gtkmm, Gtk::Viewport.  Make use
 8930     of that class instead of direct gtk calls.
 8931     
 8932     Reference:
 8933     https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Viewport.html
 8934 
 8935 2018-07-30  Luca Bacci <luca.bacci982@gmail.com>
 8936 
 8937     .gitignore: Do not track compile script
 8938     
 8939     Automake 1.14 also now always creates the 'compile' script.
 8940     http://git.savannah.gnu.org/cgit/automake.git/tree/NEWS?h=v1.14#n110
 8941 
 8942 2018-11-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8943 
 8944     Enhance comment about the 3 levels of file system support
 8945     
 8946     Add a little extra explaining how the file systems' supported actions
 8947     are determined.
 8948 
 8949 2018-10-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8950 
 8951     Improve translation help for "unformatted" file system type
 8952 
 8953 2018-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8954 
 8955     Adjust shades of aquamarine, cyan and orange
 8956     
 8957     The shades of aquamarine, cyan and orange didn't fit with the GNOME
 8958     32-colour palette.  Create a set of aquamarine, cyan and orange shades
 8959     which match the GNOME palette shades and update the colours of the
 8960     relevant file systems accordingly.
 8961         Aquamarine Hilight (#97DFC7) -
 8962         Aquamarine Medium  (#70D2B1) - NTFS
 8963         Aquamarine Dark    (#3EA281) - REFS
 8964         Aquamarine Shadow  (#1F7258) -
 8965         Cyan Hilight       (#95E3E5) - EXTENDED
 8966         Cyan Medium        (#6FCECE) -
 8967         Cyan Dark          (#3C9899) -
 8968         Cyan Shadow        (#166F70) -
 8969         Orange Hilight     (#E59F6A) -
 8970         Orange Medium      (#E58749) - BTRFS
 8971         Orange Dark        (#C26825) - ZFS
 8972         Orange Shadow      (#984F18) -
 8973     
 8974     Note that the hues of aquamarine and cyan are quite close and for the
 8975     thin outlines of partitions used in GParted they aren't easy to
 8976     distinguish.  Hence also using different lightness to additionally
 8977     separate the colour for extended partitions from NTFS and ReFS file
 8978     systems.
 8979 
 8980 2018-11-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
 8981 
 8982     Recognise APFS (Apple File System) (#23)
 8983     
 8984     Just add detection of APFS using GParted's internal magic string
 8985     detection.  It just matches 1 byte of the 2 byte object type and the
 8986     4 byte magic field found in the super block [1].  See code comment for
 8987     more details.
 8988     
 8989     Blkid has just gained recognition of APFS with util-linux v2.33 released
 8990     06-Nov-2018 [2].
 8991     
 8992     This will write enough for GParted's simple internal detection to find
 8993     APFS:
 8994         # python -c '
 8995         import sys
 8996         sys.stdout.write("\0"*24 + "\1\0" + "\0"*6 + "NXSB")
 8997         ' > /dev/sdb1
 8998     
 8999     [1] Apple File System Reference
 9000         https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf
 9001     
 9002     [2] [ANNOUNCE] util-linux v2.33
 9003         https://marc.info/?l=linux-fsdevel&m=154150400305928&w=2
 9004     
 9005     Closes #23 - GParted doesn't detect APFS (Apple File System)
 9006 
 9007 2018-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9008 
 9009     Switch HFS and HFS Plus colours to a magenta range (#23)
 9010     
 9011     Currently Linux Swap, Linux Suspend, and HFS use reds from the GNOME
 9012     32-colour palette with HFS Plus using serene red outside that palette.
 9013         HFSPLUS       - Serene Red
 9014         HFS           - Red Hilight
 9015         LINUX_SWAP    - Red Medium
 9016         LINUX_SUSPEND - Red Dark
 9017                       - Red Shadow
 9018     
 9019     Apple have a new file system, APFS (Apple File System), which is a
 9020     successor to HFS Plus [1][2].  With HFS Plus using a colour outside the
 9021     GNOME 32-colour palette and there not being enough distinct reds
 9022     available for a new file system, create a new range of magenta colours
 9023     which fit with the GNOME palette and use them for the group of Apple
 9024     file systems.
 9025         Magenta Hilight (#D59FD4) - HFS
 9026         Magenta Medium  (#B173B0) - HFSPLUS
 9027         Magenta Dark    (#874986) - APFS
 9028         Magenta Shadow  (#662C64) -
 9029     
 9030     This commit just moves HFS and HFS Plus to their new magenta colours.
 9031     
 9032     [1] About Apple File System
 9033         https://developer.apple.com/documentation/foundation/file_system/about_apple_file_system
 9034     
 9035         "Overview
 9036         Apple File System replaces HFS Plus as the default file system for
 9037         iOS 10.3 and later, and for macOS High Sierra and later.  Apple File
 9038         System offers improved file system fundamentals as well as several
 9039         new features, including cloning, snapshots, space sharing, fast
 9040         directory sizing, atomic safe-save, and sparse files.
 9041         "
 9042     
 9043     [2] Apple File System Reference
 9044         https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf
 9045     
 9046         "About Apple File System
 9047         Apple File System is the default file format used on Apple
 9048         platforms.  Apple File System is the successor to HFS Plus, so some
 9049         aspects of its design intentionally follow HFS Plus to enable data
 9050         migration from HFS Plus to Apple File System.  Other aspects of its
 9051         design address limitations with HFS Plus and enable features such as
 9052         cloning files, snapshots, encryption, and sharing free space between
 9053         volumes.
 9054         "
 9055     
 9056     Closes #23 - GParted doesn't detect APFS (Apple File system)
 9057 
 9058 2018-11-02  Daniel Mustieles <daniel.mustieles.contractor@bbva.com>
 9059 
 9060     Updated Spanish translation
 9061 
 9062 2018-11-02  Alan Mortensen <alanmortensen.am@gmail.com>
 9063 
 9064     Updated Danish translation
 9065 
 9066 2018-10-21  Emin Tufan Çetin <etcetin@gmail.com>
 9067 
 9068     Update Turkish translation
 9069 
 9070 2018-10-08  Curtis Gedak <gedakc@gmail.com>
 9071 
 9072     Update GParted appdata file (#12)
 9073     
 9074     Closes #12 - Appstream metadata needs valid license
 9075 
 9076 2018-10-05  Rafael Fontenelle <rafaelff@gnome.org>
 9077 
 9078     Update Brazilian Portuguese translation
 9079 
 9080 2018-10-04  Stas Solovey <whats_up@tut.by>
 9081 
 9082     Update Russian translation
 9083 
 9084 2018-09-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9085 
 9086     Update GParted appdata file (#12)
 9087     
 9088     Update appdata file to be inline with the current AppStream
 9089     specification [1].  Start by running:
 9090         appstream-util upgrade gparted.appdata.xml.in
 9091     and then editing the appdata as wanted.  Ensure that the file passes
 9092     validation:
 9093         appstream-util validate-relax --nonet gparted.appdata.xml.in
 9094     
 9095     When Richard Hughes added the appdata file he licensed it under the
 9096     GFDL but assigned the copyright to Curtis Gedak [3].  Now change the
 9097     license to CC0-1.0 [4] as that is what most appdata files are licensed
 9098     under [5][6].  Curtis Gedak agrees to this by reviewing this change and
 9099     being the committer of this commit.
 9100     
 9101     [1] AppStream specification
 9102         https://www.freedesktop.org/software/appstream/docs/
 9103     
 9104     [2] Fedora Packaging Guidelines for AppData Files
 9105         https://fedoraproject.org/wiki/Packaging:AppData
 9106     
 9107     [3] 640f92790b7cc5e91f367dfaa01a02a7497afbb4
 9108         Add an AppData file (#709164)
 9109     
 9110     [4] CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
 9111         https://creativecommons.org/publicdomain/zero/1.0/
 9112     
 9113     [5] Issue #12 - Appstream metadata needs valid license
 9114         https://gitlab.gnome.org/GNOME/gparted/issues/12
 9115     
 9116     [6] Merge Request !15, note 331954 - Update GParted appdata file
 9117         https://gitlab.gnome.org/GNOME/gparted/merge_requests/15#note_331954
 9118     
 9119     Closes #12 - Appstream metadata needs valid license
 9120 
 9121 2018-09-23  Piotr Drąg <piotrdrag@gmail.com>
 9122 
 9123     Update Polish translation
 9124 
 9125 2018-09-22  gogo <trebelnik2@gmail.com>
 9126 
 9127     Update Croatian translation
 9128 
 9129 2018-09-22  Marek Černocký <marek@manet.cz>
 9130 
 9131     Updated Czech translation
 9132 
 9133 2018-09-21  Bernd Homuth <dev@hmt.im>
 9134 
 9135     Update German translation
 9136 
 9137 2018-09-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9138 
 9139     Disallow resizing btrfs if any of it's mount points are read-only (#10)
 9140     
 9141     No other file system allows this, but btrfs allows simultaneous mounting
 9142     with different read-write permission.  Further, btrfs allows resizing
 9143     via read-write mounts, but not via read-only mounts.
 9144     
 9145         # mkfs.btrfs /dev/sdb1
 9146         btrfs-progs v4.15.1
 9147         ...
 9148         Filesystem size:    512.00MiB
 9149         ...
 9150         Number of devices:  1
 9151         Devices:
 9152            ID        SIZE  PATH
 9153             1   512.00MiB  /dev/sdb1
 9154     
 9155         # mount -o ro /dev/sdb1 /mnt/1
 9156         # mount -o rw /dev/sdb1 /mnt/2
 9157         # grep sdb1 /proc/mounts
 9158         /dev/sdb1 /mnt/1 btrfs ro,relatime,space_cache,subvolid=5,subvol=/ 0 0
 9159         /dev/sdb1 /mnt/2 btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0
 9160     
 9161         # btrfs filesystem resize 1:500M /mnt/1
 9162         Resize '/mnt/1' of '1:500M'
 9163         ERROR: unable to resize '/mnt/1': Read-only file system
 9164         # echo $?
 9165         1
 9166     
 9167         # btrfs file system resize 1:500M /mnt/2
 9168         Resize '/mnt/2' of '1:500M'
 9169         # echo $?
 9170         0
 9171         # btrfs filesystem show /dev/sdb1
 9172         Label: none  uuid: 74ccd37a-e665-4f25-b77e-a305b8a025e9
 9173                 Total devices 1 FS bytes used 128.00KiB
 9174                 devid    1 size 500.00MiB used 88.00MiB path /dev/sdb1
 9175     
 9176     Also with the above order of the read-only mount listed in /proc/mounts
 9177     first and the read-write mount second, GParted again allows a resize
 9178     operational to be tried, but if fails just like before:
 9179     
 9180         Grow /dev/sdb1 from 512.00 MiB to 1.0 GiB                  (ERROR)
 9181         * calibrate /dev/sdb1                                      (SUCCESS)
 9182         * grow partition from 512.00 MiB to 1.00 GiB               (SUCCESS)
 9183         * grow filesystem to fill the partition                    (ERROR)
 9184           * btrfs filesystem resize 1:max '/mnt/1'                 (ERROR)
 9185               Resize '/mnt/1 to '1:max'
 9186               ERROR: unable to resize '/mnt/1': Read-only file system
 9187     
 9188     What happened is that the Mount_Info module only stores single read-only
 9189     flag against the mounted block device, not for each mount point, and as
 9190     the first and second sdb1 lines from /proc/mounts were processed, the
 9191     MountEntry became:
 9192     
 9193       1st)   mount_info[BS("/dev/sdb1")] -> {true , ["/mnt/1"]
 9194       2nd)   mount_info[BS("/dev/sdb1")] -> {false, ["/mnt/1", "/mnt/2"]
 9195     
 9196     So GParted thought the file system was mounted read-write, but used the
 9197     first mount point, /mnt/1, which was mounted read-only.
 9198     
 9199     This is a very unusual situation so unlikely to be encountered by users.
 9200     Fix simply and safely by treating the mounted block device as mounted
 9201     read-only if any of the mount points are mounted read-only, rather than
 9202     just the last processed mount point.
 9203     
 9204     Closes #10 - Gparted fails to resize btrfs partition that is mounted
 9205                  read-only
 9206 
 9207 2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9208 
 9209     Prevent online resizing of file systems mounted read-only (#10)
 9210     
 9211     Resizing a file system mounted read-only fails.  Example:
 9212     
 9213         # mkfs.btrfs /dev/sdb1
 9214         # mount -o ro /dev/sdb1 /mnt/1
 9215     
 9216     In GParted try to resize partition sdb1.  The operation fails like this:
 9217     
 9218         Grow /dev/sdb1 from 512.00 MiB to 1.00 GiB                 (ERROR)
 9219         * calibrate /dev/sdb1                                      (SUCCESS)
 9220         * grow partition from 512.00 MiB to 1.00 GiB               (SUCCESS)
 9221         * grow filesystem to fill the partition                    (ERROR)
 9222           * btrfs filesystem resize 1:max '/mnt/1'                 (ERROR)
 9223               Resize '/mnt/1' of '1:max'
 9224               ERROR: unable to resize '/mnt/1': Read-only file system
 9225     
 9226     See GitLab issue for the testing results of attempting to online resize
 9227     all supporting file system while mounted read-only.  No file system
 9228     allows online resizing while mounted read-only, except for reiserfs.
 9229         Issue #10 - Gparted fails to resize btrfs partition that is mounted
 9230         read-only
 9231         https://gitlab.gnome.org/GNOME/gparted/issues/10
 9232     
 9233     Fix by preventing online resizing of *all* file systems mounted
 9234     read-only, including reiserfs.  Instead of displaying the resize dialog
 9235     in this case, display an information dialog explaining why the partition
 9236     can't be resized.  This is similar to what happens when attempting to
 9237     create a new partition on a disk without a partition table.  The new
 9238     dialog looks like:
 9239     
 9240         (!) Unable to resize read-only file system /dev/sdb1
 9241             The file system can not be resized while it is mounted read-only.
 9242             Either unmount the file system or remount it read-write.
 9243                                                                        [ OK ]
 9244     
 9245     Closes #10 - Gparted fails to resize btrfs partition that is mounted
 9246                  read-only
 9247 
 9248 2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9249 
 9250     Add and set read-only mount flag in the Partition object (#10)
 9251     
 9252     Set the partition read-only mount flag at the same time as setting the
 9253     file system mount points.
 9254     
 9255     Closes #10 - Gparted fails to resize btrfs partition that is mounted
 9256                  read-only
 9257 
 9258 2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9259 
 9260     Add parsing of read-only mount option into mount maps (#10)
 9261     
 9262     Parse file system mount options string from file and mount command
 9263     output, extracting the setting for the read-only flag and storing in the
 9264     mount maps.  Read-only flag for swap space gets the struct MountEntry
 9265     constructor default of false.
 9266     
 9267     Closes #10 - Gparted fails to resize btrfs partition that is mounted
 9268                  read-only
 9269 
 9270 2018-09-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9271 
 9272     Add read-only flag to mounted file system entries (#10)
 9273     
 9274     Just updates the 2 maps in the Mount_Info module so that they also have
 9275     a read-only flag for each mount.  Ensure that when a struct MountEntry
 9276     is created the readonly bool POD (Plain Old Data) type is initialised by
 9277     the constructor.  Nothing yet sets or uses the flag.
 9278     
 9279     Closes #10 - Gparted fails to resize btrfs partition that is mounted
 9280                  read-only
 9281 
 9282 2018-09-19  gogo <trebelnik2@gmail.com>
 9283 
 9284     Update Croatian translation
 9285 
 9286 2018-09-18  Mario Blättermann <mario.blaettermann@gmail.com>
 9287 
 9288     Update German translation
 9289 
 9290 2018-09-18  Marek Cernocky <marek_cernocky@conel.cz>
 9291 
 9292     Updated Czech translation
 9293 
 9294 2018-09-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9295 
 9296     White space tidy-up of Utils::get_filesystem_string()
 9297     
 9298     Use smart tab alignment, list cases in enumeration order and update
 9299     translation help for unallocated space.
 9300 
 9301 2018-09-05  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9302 
 9303     Replace open coding FS unknown usage check in prepare_new_partition()
 9304     
 9305     Back when unallocated space handling was being added, this case was not
 9306     converted from open coding to using the provided method to check for
 9307     unknown file system usage.  Specifically this commit missed using
 9308     Partition::sector_usage_known() in
 9309     Dialog_Base_Partition::prepare_new_partition():
 9310     
 9311         7ebedc4bb3b81e85fb4c628a2a05308ada147d68
 9312         Don't show intrinsic unallocated space (#499202)
 9313     
 9314     Fix it now.
 9315 
 9316 2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9317 
 9318     Refactor get_filesystem_object()
 9319     
 9320     The function was using std::map::count() [1] to test if the file system
 9321     entry existed in the map before looking up the value using
 9322     std::map::operator[] to avoid having operator[] inserting elements which
 9323     don't exist [2].
 9324     
 9325     Rewrite using std::map::find() [3] so that map is only searched once,
 9326     and so that it is more obvious what is happening without having to know
 9327     the subtleties of std::map::count() and ::operator[].
 9328     
 9329     [1] std::map::count()
 9330         http://www.cplusplus.com/reference/map/map/count/
 9331     
 9332         "Searches the container for elements with a key equivalent to k and
 9333         returns the number of matches.
 9334     
 9335         Because all elements in a map container are unique, the function can
 9336         only return 1 (if the element is found) or zero (otherwise).
 9337         "
 9338     
 9339     [2] std::map::operator[]
 9340         http://www.cplusplus.com/reference/map/map/operator[]/
 9341     
 9342         "If k does not match the key of any element in the container, the
 9343         function inserts a new element with that key and returns a reference
 9344         to its mapped value.  Notice that this always increases the
 9345         container size by one, even if no mapped value is assigned to the
 9346         element (the element is constructed using its default constructor).
 9347         "
 9348     
 9349     [3] std::map::find
 9350         http://www.cplusplus.com/reference/map/map/find/
 9351     
 9352         "Searches the container for an element with a key equivalent to k
 9353         and returns an iterator to it if found, otherwise it returns an
 9354         iterator to map::end.
 9355         "
 9356 
 9357 2018-09-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9358 
 9359     Re-assign UFS to be a basic supported file system (!13)
 9360     
 9361     There is no prospect of there being ufs-tools on Linux.  The was a
 9362     project which did release ufs-tools version 0.1 in 2004, but has been
 9363     inactive since then.
 9364         http://ufs-linux.sourceforge.net/
 9365     
 9366     Copying and moving is now implemented for file systems in the basic
 9367     supported category.  Also mounting and unmounting of unsupported file
 9368     system and reporting their usage while mounted has been added.  This is
 9369     all the support that GParted has ever implemented for UFS.  Therefore
 9370     re-assign UFS as a basic supported file system as it looses no
 9371     functionality.
 9372     
 9373     Closes !13 - Support copying and moving of unsupported partition content
 9374 
 9375 2018-09-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9376 
 9377     Extend un/mounting and usage reporting to unsupported file systems (!13)
 9378     
 9379     For unsupported (including basic supported) file systems, also record
 9380     the mount point(s) when mounted and from /etc/fstab when not.  This
 9381     allows mounted unsupported file systems to be unmounted and ones with
 9382     /etc/fstab entries to be mounted, just like fully supported file
 9383     systems.
 9384     
 9385     Also for unsupported (again including basic supported) mounted file
 9386     systems query the kernel for the usage, just like is already done for
 9387     supported file systems.
 9388     
 9389     Closes !13 - Support copying and moving of unsupported partition content
 9390 
 9391 2018-09-04  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9392 
 9393     Correctly preview unknown FS usage when pasting into an existing partition (!13)
 9394     
 9395     When previewing copying a partition of unknown file system usage into an
 9396     existing partition, the usage still shows that of the overwritten file
 9397     system.  This affects existing supported file systems EXFAT, F2FS, MINIX
 9398     and UFS and the new basic supported one too, all for which GParted can't
 9399     read the file system usage.
 9400     
 9401     Handle the case of the source file system usage being unknown and
 9402     explicitly set the copied usage to unknown too.
 9403     
 9404     Closes !13 - Support copying and moving of unsupported partition content
 9405 
 9406 2018-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9407 
 9408     Correctly preview unknown FS usage when pasting into a new partition (!13)
 9409     
 9410     GParted previews copying a partition of unknown file system usage into a
 9411     new partition as 100% used.  This affects existing supported file
 9412     systems EXFAT, F2FS, MINIX and UFS and the new basic supported ones too,
 9413     all for which GParted can't read the file system usage.
 9414     
 9415     When preparing the working new_partition object in the Copy / Paste
 9416     dialog, the maths for the known file system usage happened to convert
 9417     the figures of used = -1 and unused = -1 into set_sector_usage(-1, 0).
 9418     Those values passed to set_sector_usage() mean unable to query the file
 9419     system size so assume it fills the partition and unused is 0, hence 100%
 9420     used.
 9421     
 9422     Fix this by specifically handling the copying of file systems with
 9423     unknown usage, setting the pasted file system usage to unknown too,
 9424     used = -1 and unused = -1.
 9425     
 9426     Closes !13 - Support copying and moving of unsupported partition content
 9427 
 9428 2018-09-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9429 
 9430     Display "other" in the File System Support dialog (!13)
 9431     
 9432     To display the supported actions for all basic supported file systems to
 9433     the users.
 9434     
 9435     Prepare the list of file system actions in Win_GParted because calling
 9436     get_fs() for the "other" actions requires the gparted_core object and
 9437     load_filesystems() currently doesn't have access to it.  One alternative
 9438     would have been to make get_fs() and FILESYSTEMS static members of
 9439     GParted_Core class.  Another alternative would have been to pass the
 9440     gparted_core object to load_filesystems().  The chosen way seemed
 9441     simplest.
 9442     
 9443     Closes !13 - Support copying and moving of unsupported partition content
 9444 
 9445 2018-09-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9446 
 9447     Add "other" file system type (!13)
 9448     
 9449     Want a single term under which the supported actions for all basic
 9450     supported file systems are displayed in the File System Support dialog.
 9451     "Unknown" isn't the correct adjective because the group includes
 9452     unknown, but also includes: BitLocker, GRUB2 core image, ISO9660, Linux
 9453     SWRaid, Linux Suspend, REFS and ZFS.  Add "other" file system type just
 9454     for displaying in the dialog.
 9455     
 9456     Closes !13 - Support copying and moving of unsupported partition content
 9457 
 9458 2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9459 
 9460     Enable copy and move for basic supported file systems (!13)
 9461     
 9462     Add copy and move supported action set for each basic supported file
 9463     system.
 9464     
 9465     Closes !13 - Support copying and moving of unsupported partition content
 9466 
 9467 2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9468 
 9469     Limit FILESYSTEM_MAP entries to supported and basic supported FSs (!13)
 9470     
 9471     Introduce a third category of basic file system support to go along with
 9472     the existing full and none.  Use the file system's entry in
 9473     FILESYSTEM_MAP to determine the level of support.  See comment in
 9474     GParted_Core::init_filesystems() for details.
 9475     
 9476     Add and remove FILESYSTEM_MAP NULL pointer entries as required, so that
 9477     only the file system types intended to have basic support have such
 9478     entries.
 9479     
 9480     Closes !13 - Support copying and moving of unsupported partition content
 9481 
 9482 2018-09-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9483 
 9484     Separate unknown file system type from unsupported actions (!13)
 9485     
 9486     PATCHSET OVERVIEW:
 9487     
 9488     Forum user wanted to be able to move a partition with unknown content:
 9489         Topic: Can't move/rezise partition on android device (unknown format)
 9490         http://gparted-forum.surf4.info/viewtopic.php?id=17742
 9491     
 9492     While GParted isn't going to be able to run any sort of file system
 9493     check on the unknown content there isn't any reason why such a partition
 9494     can't be copied or moved so long as the partition stays the same size.
 9495     GParted can just use it's existing internal block copy routine it uses
 9496     for copying and moving most partition content.  This is no different to
 9497     a few of the already supported file system types which don't have a
 9498     check-repair tool: exfat, f2fs, nilfs2, udf, ufs.
 9499     
 9500     This patchset introduces a third category called basic file system
 9501     support to go along with the existing full and unsupported categories.
 9502     Basic supported file systems will just use GParted's inbuilt
 9503     capabilities to perform actions so they won't need a derived FileSystem
 9504     implementation class.  Unknown file systems along with all other
 9505     recognised, but otherwise unsupported, file systems will be assigned to
 9506     this new basic supported category.
 9507     
 9508     THIS PATCH:
 9509     
 9510     FS_UNKNOWN is used when GParted is unable to identify the contents of a
 9511     partition.  FS_UNKNOWN is also used to generate a file system support
 9512     set with no supported actions, in the FileSystem::FS::FS() constructor
 9513     and in GParted_Core::get_fs().
 9514     
 9515     As support for operations on partitions with unknown content is being
 9516     added, the second usage will be confusing or even wrong.
 9517     FS( FS_UNKNOWN ) constructs the no supported actions set, yet GParted
 9518     will support some actions for the FS_UNKNOWN file system type.
 9519     Therefore add FS_UNSUPPORTED for the second usage.
 9520     
 9521     Closes !13 - Support copying and moving of unsupported partition content
 9522 
 9523 2018-09-17  Marek Cernocky <marek_cernocky@conel.cz>
 9524 
 9525     Updated Czech help translation
 9526 
 9527 2018-09-07  Alan Mortensen <alanmortensen.am@gmail.com>
 9528 
 9529     Updated Danish translation
 9530 
 9531 2018-09-07  Marek Cernocky <marek_cernocky@conel.cz>
 9532 
 9533     Updated Czech translation
 9534 
 9535 2018-09-05  Anders Jonsson <anders.jonsson@norsjovallen.se>
 9536 
 9537     Update Swedish translation
 9538 
 9539 2018-09-04  Efstathios Iosifidis <eiosifidis@gnome.org>
 9540 
 9541     Update Greek translation
 9542 
 9543 2018-09-02  gogo <trebelnik2@gmail.com>
 9544 
 9545     Update Croatian translation
 9546 
 9547 2018-09-01  Rafael Fontenelle <rafaelff@gnome.org>
 9548 
 9549     Update Brazilian Portuguese translation
 9550 
 9551 2018-09-01  Rafael Fontenelle <rafaelff@gnome.org>
 9552 
 9553     Update Brazilian Portuguese translation
 9554 
 9555 2018-09-01  Rafael Fontenelle <rffontenelle@gmail.com>
 9556 
 9557     gparted.xml: closed -> closes
 9558     
 9559     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".
 9560 
 9561 2018-08-28  Emin Tufan Çetin <etcetin@gmail.com>
 9562 
 9563     Update Turkish translation
 9564 
 9565 2018-08-27  Kukuh Syafaat <kukuhsyafaat@gnome.org>
 9566 
 9567     Update Indonesian translation
 9568 
 9569 2018-08-26  Piotr Drąg <piotrdrag@gmail.com>
 9570 
 9571     Update Polish translation
 9572 
 9573 2018-08-25  Mario Blättermann <mario.blaettermann@gmail.com>
 9574 
 9575     Update German translation
 9576 
 9577 2018-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9578 
 9579     White space tidy-up of Utils::get_color()
 9580     
 9581     No functional change.  The code layout is old and a mess, not lining up
 9582     vertically.  Use more common code layout and spaces to align text
 9583     vertically.  List cases in enumeration order.  Identify each colour
 9584     choice as either in the GNOME palette (no marking), an extended shade to
 9585     a colour in the GNOME palette [+], or a colour outside the GNOME palette
 9586     [*].
 9587     
 9588     There's lots of other switch statements just in Utils.cc which could do
 9589     with tidying up, but this is the one I am looking at now.
 9590 
 9591 2018-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9592 
 9593     Switch FAT16/32 colours to Accent Greens from the GNOME palette
 9594     
 9595     FAT16 was a fully saturated green (RGB #00FF00) and FAT32 was a little
 9596     darker.  These are out of character with the colours from the GNOME
 9597     palette for other file systems.  Change the colours to use near
 9598     alternative Accent Greens from the GNOME colour palette.  So now we have
 9599     the following file system colours, from light to dark:
 9600         FAT16 - Accent Green Hilight
 9601         FAT32 - Accent Green
 9602         EXFAT - Accent Green Dark
 9603         UDF   - Accent Green Shadow
 9604     
 9605     Strictly speaking only Accent Green and Accent Green Dark are part of
 9606     the GNOME palette.  Accent Green Hilight and Accent Green Shadow are
 9607     extensions expanding the range of Accent Greens.
 9608     
 9609         GNOME Human Interface Design 2.2.1 / Visual Design / colour /
 9610         https://developer.gnome.org/hig-book/2.32/design-color.html.en
 9611     
 9612         "Guidelines
 9613         * Use the GNOME color palette.  If you need a darker or lighter
 9614           shade, start from one of the colors from the palette and darken or
 9615           lighten as needed.
 9616         "
 9617 
 9618 2018-08-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9619 
 9620     Add support for minix file system (!12)
 9621     
 9622     Util-linux package, at least as far back as version 2.23.2 as found on
 9623     CentOS 7, provides the mkfs.minix and fsck.minix commands.  Also blkid
 9624     from the same package, recognises minix file systems.
 9625     
 9626     Create version 3 file systems because MINIX 3 [1] is the only supported
 9627     version and that reportedly uses version 3 of the file system [2].
 9628     
 9629     [1] MINIX 3 / History
 9630         https://en.wikipedia.org/wiki/MINIX_3#History
 9631     
 9632     [2] Regarding MINIX 3 file system
 9633         https://groups.google.com/forum/#!topic/minix3/3-TeHR_23X8
 9634     
 9635         "MINIX 3 uses Minix File System (MFS).  More precisely MFS V3."
 9636     
 9637     Closes !12 - Add minix file system support
 9638 
 9639 2018-08-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9640 
 9641     Use one shade darker blue for EXT2/3/4 file systems (!12)
 9642     
 9643     I see the MINIX file system as a kind of forerunner to EXT* because of
 9644     it's history [1].  No body uses the original EXT file system any more,
 9645     however the MINIX file system is still used by the MINIX 3 operating
 9646     system.  So use the same range of colours for MINIX and EXT2/3/4.  Use
 9647     one shade darker blue for EXT2/3/4, allowing MINIX to use the lightest
 9648     blue.  After adding MINIX support in the next patch, the colours will
 9649     become:
 9650         MINIX - Blue Hilight
 9651         EXT2  - Blue Medium
 9652         EXT3  - Blue Dark
 9653         EXT4  - Blue Shadow
 9654     
 9655     [1] MINIX file system / History
 9656         https://en.wikipedia.org/wiki/MINIX_file_system#History
 9657     
 9658         "When Linus Torvalds first started writing his Linux operating
 9659         system kernel (1991), he was working on a machine running MINIX, and
 9660         adopted its file system layout.  This soon proved problematic, since
 9661         MINIX restricted filename lengths to fourteen characters (thirty in
 9662         later versions), it limited partitions to 64 megabytes, and the file
 9663         system was designed for teaching purposes, not performance.  The
 9664         Extended file system (ext; April 1992) was developed to replace
 9665         MINIX's, but it was only with the second version of this, ext2, that
 9666         Linux obtained a commercial-grade file system.  As of 1994, the
 9667         MINIX file system was "scarcely in use" among Linux users.
 9668         "
 9669     
 9670     Closes !12 - Add minix file system support
 9671 
 9672 2018-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9673 
 9674     Update bug links in the UI translation files too (!11)
 9675     
 9676     The translations which have been updated for the 0.32.0 release, and
 9677     since the migration to GitLab hosting, have been updated with the new
 9678     GitLab issue bug reporting URL.  Update all the remaining translation
 9679     files to match.
 9680     
 9681     Closes !11 - Update bugzilla references
 9682 
 9683 2018-08-22  Curtis Gedak <gedakc@gmail.com>
 9684 
 9685     Update bug links from Bugzilla to GitLab issues (!11)
 9686     
 9687     - Bugzilla has disabled reporting of new bugs.
 9688     - Existing Bugzilla bug reports permit new comments only.
 9689     - New bugs are to be created on GitLab issues.
 9690     
 9691     Reference:
 9692     [GitLab] IMPORTANT: Mass migration plan
 9693     https://mail.gnome.org/archives/desktop-devel-list/2018-March/msg00023.html
 9694     
 9695     Closes !11 - Update bugzilla references
 9696 
 9697 2018-08-22  Curtis Gedak <gedakc@gmail.com>
 9698 
 9699     Fix broken XML tag in Romanian translation of help manual
 9700 
 9701 2018-08-22  Curtis Gedak <gedakc@gmail.com>
 9702 
 9703     Append -git to version for continuing development
 9704 
 9705 2018-08-22  Curtis Gedak <gedakc@gmail.com>
 9706 
 9707     ==========   gparted-0.32.0   ==========
 9708 
 9709 2018-08-22  A S Alam <amanpreet.alam@gmail.com>
 9710 
 9711     Update Punjabi translation
 9712 
 9713 2018-08-21  صفا الفليج <safa1996alfulaij@gmail.com>
 9714 
 9715     Update Arabic translation
 9716 
 9717 2018-08-20  Fabio Tomat <f.t.public@gmail.com>
 9718 
 9719     Add Friulian translation
 9720 
 9721 2018-08-20  Alan Mortensen <alanmortensen.am@gmail.com>
 9722 
 9723     Updated Danish translation
 9724 
 9725 2018-08-19  Daniel Șerbănescu <daniel@serbanescu.dk>
 9726 
 9727     Update Romanian translation
 9728 
 9729 2018-08-19  Daniel Șerbănescu <daniel@serbanescu.dk>
 9730 
 9731     Update Romanian translation
 9732 
 9733 2018-08-18  Mario Blättermann <mario.blaettermann@gmail.com>
 9734 
 9735     Update German translation
 9736 
 9737 2018-08-18  Jiri Grönroos <jiri.gronroos@iki.fi>
 9738 
 9739     Update Finnish translation
 9740 
 9741 2018-08-18  Hannie Dumoleyn <hannie@ubuntu-nl.org>
 9742 
 9743     Update Dutch translation
 9744 
 9745 2018-08-17  Mario Blättermann <mario.blaettermann@gmail.com>
 9746 
 9747     Update German translation
 9748 
 9749 2018-08-17  Aurimas Černius <aurisc4@gmail.com>
 9750 
 9751     Updated Lithuanian translation
 9752 
 9753 2018-08-17  Baurzhan Muftakhidinov <baurthefirst@gmail.com>
 9754 
 9755     Update Kazakh translation
 9756 
 9757 2018-08-17  Trần Ngọc Quân <vnwildman@gmail.com>
 9758 
 9759     Updated Vietnamese translation
 9760     
 9761     Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
 9762 
 9763 2018-08-16  Anders Jonsson <anders.jonsson@norsjovallen.se>
 9764 
 9765     Update Swedish translation
 9766 
 9767 2018-08-16  Claude Paroz <claude@2xlibre.net>
 9768 
 9769     Updated French translation
 9770 
 9771 2018-08-16  Anders Jonsson <anders.jonsson@norsjovallen.se>
 9772 
 9773     Update Swedish translation
 9774 
 9775 2018-08-16  Emin Tufan Çetin <etcetin@gmail.com>
 9776 
 9777     Update Turkish translation
 9778 
 9779 2018-08-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9780 
 9781     Update help manual with opening and closing encrypted partitions (#795617)
 9782     
 9783     Bug 795617 - Implement opening and closing of LUKS mappings
 9784 
 9785 2018-08-13  Yi-Jyun Pan <pan93412@gmail.com>
 9786 
 9787     Update Chinese (Taiwan) translation
 9788 
 9789 2018-07-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9790 
 9791     Update Autoconf macro AX_CXX_COMPILE_STDCXX_11 to latest serial 18
 9792     
 9793     Update to the latest version of the AX_CXX_COMPILE_STDCXX_11 macro from
 9794     the Autoconf Archive,  Note that the macro now depends on
 9795     AX_CXX_COMPILE_STDCXX so this macro has to be included too.
 9796 
 9797 2018-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9798 
 9799     Remove unused member Win_GParted::menu_item
 9800     
 9801     Usage of menu_item was removed in this commit from 2006.
 9802     
 9803         fb672f5219c5cceaae26246fb2c914478b8d2bbd
 9804         happy new year ;) fixed some alignment issues removed confirmation dialogs
 9805 
 9806 2018-07-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9807 
 9808     Remove unused members Win_GParted::label_device_info[12]
 9809     
 9810     Usage of members label_device_info1 and label_device_info2 was removed
 9811     in this commit from 2004.
 9812     
 9813         8ae5ebb2e6d91e2671851e25659e19a90925d65c
 9814         several (mostly) i18n related fixes/cleanups
 9815 
 9816 2018-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9817 
 9818     Re-add getting EXT2/3/4 free space from dumpe2fs as a fallback (#8)
 9819     
 9820     If an EXT2/3/4 file system needs checking, then resize2fs will report an
 9821     error, rather than report the minimum file system size.
 9822     
 9823         # mkfs.ext4 /dev/sdb11
 9824         # resize2fs -P /dev/sdb11
 9825         resize2fs 1.42.9 (28-Dec-2013)
 9826         Estimated minimum size of the filesystem: 17012
 9827         # debugfs -w -R "ssv state 0" /dev/sdb11
 9828         # resize2fs -P /dev/sdb11
 9829         resize2fs 1.42.9 (28-Dec-2013)
 9830         Please run 'e2fsck -f /dev/sdb11' first.
 9831     
 9832         # echo $?
 9833         1
 9834     
 9835     This will prevent GParted reading the file system usage and in turn
 9836     GParted won't allow the file system to be shrunk.  Re-add the previous
 9837     method of reading the free space from dumpe2fs output as a fallback.
 9838     
 9839     With this change, the worst case scenario is that GParted allows the
 9840     user to attempt to shrink an unclean EXT4 file system, smaller that that
 9841     which resize2fs allows and gets an error telling them so.  As part of
 9842     the failed shrink operation GParted will have checked the file system so
 9843     on refresh GParted will get the correct minimum size next time.
 9844     
 9845     This scenario only seems to apply to unclean EXT4 file systems because
 9846     resize2fs has a larger minimum size that the free blocks would suggest
 9847     because of extra space requirements when resizing EXT4 file systems [1].
 9848     
 9849     [1] e2fsprogs 1.44.3, resize/resize2fs.c:calculate_minimum_resize_size()
 9850         https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/resize/resize2fs.c?h=v1.44.3#n2946
 9851         /*
 9852          * For ext4 we need to allow for up to a flex_bg worth of
 9853          * inode tables of slack space so the resize operation can be
 9854          * guaranteed to finish.
 9855          */
 9856     
 9857         /*
 9858          * We need to reserve a few extra blocks if extents are
 9859          * enabled, in case we need to grow the extent tree.  The more
 9860          * we shrink the file system, the more space we need.
 9861          *
 9862          * The absolute worst case is every single data block is in
 9863          * the part of the file system that needs to be evacuated,
 9864          * with each data block needs to be in its own extent, and
 9865          * with each inode needing at least one extent block.
 9866          */
 9867     
 9868     Closes #8 - Shrinking an EXT4 partition does not respect resize2fs
 9869                 limits
 9870 
 9871 2018-07-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9872 
 9873     Use resize2fs -P to get minimum EXT2/3/4 FS size (#8)
 9874     
 9875     A user reported GParted failed to shrink an EXT4 file system because
 9876     GParted tried to shrink it smaller than resize2fs reported minimum size.
 9877     Operation details were:
 9878     
 9879         Shrink /dev/sdc1 from 931.51 GiB to 605.00 GiB             (ERROR)
 9880           calibrate /dev/sdc1                                      (SUCCESS)
 9881             path: /dev/sdc1 (partition)
 9882             start: 63
 9883             end: 1953520064
 9884             size: 1953520002 (931.51 GiB)
 9885           check file system on /dev/sdc1 for errors and (if poss...(SUCCESS)
 9886             e2fsck -f -y -v -C 0 '/dev/sdc1'                       (SUCCESS)
 9887               ...
 9888               158165624 blocks are used (64.77% of 244190000)
 9889               ...
 9890           shrink file system                                       (ERROR)
 9891             resize2fs -p '/dev/sdc1' 634389176K                    (ERROR)
 9892               resize2fs 1.44.2 (14-May-2018)
 9893               resize2fs: New size smaller than minimum (171882113)
 9894     
 9895     The GParted figures:
 9896      *  Partition size    = 1953520064 (512b sectors) = 976760032 KiB
 9897      *  FS size           = 244190000 (4K blocks)     = 976760000 KiB
 9898      *  Used FS size      = 158165624 (4K blocks)     = 632662496 KiB
 9899      *  Requested FS size                             = 634389176 KiB
 9900     The resize2fs figure:
 9901      *  Minimum FS size   = 171882113 (4K blocks)     = 687528452 KiB
 9902     
 9903     GParted uses the number of free blocks in the file system to determine
 9904     the minimum size it can shrink a file system to.  However resize2fs uses
 9905     it's own internally calculated minimum size and won't shrink a file
 9906     system below that size, as seen in the above details.  Resize2fs does
 9907     have a force flag, (-f) which overrides some safety checks which are
 9908     normally enforced, to allow it to try to shrink a file system smaller
 9909     than it's calculated minimum.  GParted currently doesn't use the force
 9910     flag and it seems unwise for it to start to do so.
 9911     
 9912     So for unmounted EXT2/3/4 file systems, change GParted to use
 9913     'resize2fs -P' to get the minimum file system size, rather than using
 9914     the number of free blocks direct from the super block, as reported by
 9915     'dumpe2fs -h'.
 9916     
 9917     Mounted file systems still use statvfs() to provide file system usage.
 9918     As mounted EXT2/3/4 file systems can't be shrunk the fact that statvfs()
 9919     produces different, possibly smaller than minimum, figures than those
 9920     from 'resize2fs -P' doesn't matter.
 9921     
 9922     Closes #8 - Shrinking an EXT4 partition does not respect resize2fs
 9923                 limits
 9924 
 9925 2018-07-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9926 
 9927     Work in FS blocks until later while reading EXT2/3/4 usage (#8)
 9928     
 9929     No functional change.  Just work in FS block sized units until as late
 9930     as possible in ext2::set_used_sectors(), before converting to device
 9931     sector size units.  This is to make the following change simpler and
 9932     easier to understand.
 9933     
 9934     Closes #8 - Shrinking an EXT4 partition does not respect resize2fs
 9935                 limits
 9936 
 9937 2018-07-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9938 
 9939     Stop xmllint scrollkeeper-omf.dtd fetch failure breaking CI tests (#9)
 9940     
 9941     The GitLab Continuous Integration test stage jobs can fail like this:
 9942     
 9943         $ make check
 9944         ...
 9945         Making check in help
 9946         make[1]: Entering directory `/builds/mfleetwo/gparted/help'
 9947         ...
 9948         xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' gparted-C.omf
 9949         warning: failed to load external entity "http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd"
 9950         Could not parse DTD http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd
 9951         xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' gparted-cs.omf
 9952         ...
 9953         make[1]: *** [check-doc-omf] Error 2
 9954         make[1]: Leaving directory `/builds/mfleetwo/gparted/help'
 9955         make: *** [check-recursive] Error 1
 9956         ERROR: Job failed: exit code 1
 9957     
 9958     It fails when the scrollkeeper.sourceforge.net site reports that
 9959     SourceForge is undergoing maintenance or is temporarily unavailable.  I
 9960     have seen this occur on 3 separate occasions in the last 4 weeks since I
 9961     started experimenting with GitLab CI, which is rather too often.
 9962     
 9963     Xmllint comes from the GNOME 2 gnome-doc-utils.make rules used to build
 9964     and validate GNOME 2 documentation.
 9965     
 9966     Fragment of useful Debian bug report 730688:
 9967         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=730688
 9968         --disable-scrollkeeper requieres scrollkeeper installed
 9969     
 9970         "You can reproduce the problem in mdbtoools version 0.7.1-1 with no
 9971         network, and rarian-compat not installed.
 9972     
 9973         When the network is available, buildd downloads the DTD for checks.
 9974         When there is no network, gnome-doc-utils fails.
 9975         "
 9976     
 9977     Fix by:
 9978     (1) adding the rarian-compat package to the CI Docker images, which
 9979         provides a local copy of the scrollkeeper-omf.dtd file;
 9980     (2) adding the xmllint --nonet option to prevent fetching of DTDs
 9981         remotely.
 9982     
 9983     With reference to earlier commit:
 9984         0eb9f1fcfb2a438ecd85ad7e526f0ec3d01e2da6
 9985         Reduce dependency on scrollkeeper (#743318)
 9986     That commit allowed GParted to be installed on GNOME 3 desktops without
 9987     requiring rarian-compat package to be installed.  This commit adds
 9988     rarian-compat to the CI images so that 'make check' can succeed without
 9989     accessing the Internet.  Just the intricate path to continue to build
 9990     and test a GNOME 2 application in a world of GNOME 3 desktops with
 9991     beginning to be reduced backward compatibility.
 9992     
 9993     Closes #9 - CI test jobs occasionally fail with xmllint not loading
 9994                 external entity http://scrollkeeper.sourceforce.net/dtds/
 9995                 scrollkeeper-omf-1.0/scrollkeeper-omf.dtd
 9996 
 9997 2018-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
 9998 
 9999     Stop parallelising make distcheck in GitLab CI test jobs (!6)
10000     
10001     Unfortunately parallelising 'make distcheck' causes it to fail like
10002     this:
10003     
10004         $ nproc=`grep -c '^processor' /proc/cpuinfo` || nproc=1
10005         $ echo nproc=$nproc
10006         nproc=8
10007         ...
10008         $ make -j $nproc distcheck
10009         ...
10010         make[1]: Entering directory '/builds/mfleetwo/gparted/gparted-0.31.0-git/_build/sub'
10011         ERROR: files left after uninstall:
10012         ./share/icons/hicolor/icon-theme.cache
10013         Makefile:896: recipe for target 'distuninstallcheck' failed
10014         make[1]: Leaving directory '/builds/mfleetwo/gparted/gparted-0.31.0-git/_build/sub'
10015         make[1]: *** [distuninstallcheck] Error 1
10016         make: *** [distcheck] Error 1
10017         Makefile:840: recipe for target 'distcheck' failed
10018         ERROR: Job failed: exit code 1
10019     
10020     Therefore go back to serial 'make distcheck'.
10021     
10022     Closes !6 - Reduce the time taken by the GitLab CI jobs
10023 
10024 2018-07-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
10025 
10026     Parallelise building GParted in GitLab CI jobs (!6)
10027     
10028     Reduce the time taken by the GitLab Continuous Integration jobs by
10029     parallelising make to use all available CPUs in the Docker CI image
10030     when it is building GParted code.  This includes 'make diskcheck'
10031     because that also does a second build of the GParted code in a separate
10032     subdirectory.
10033     
10034     Closes !6 - Reduce the time taken by the GitLab CI jobs
10035 
10036 2018-06-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
10037 
10038     Move enum CUSTOM_TEXT into FileSystem.h
10039     
10040     The CUSTOM_TEXT enumeration is exclusively used as the type of one of
10041     the parameters to the functions get_generic_text() and get_custom_text()
10042     in the FileSystem class and derived classes.  The definition of the
10043     enumeration therefore belongs in FileSystem.h.  Move it.
10044 
10045 2018-06-13  Mike Fleetwood <mike.fleetwood@googlemail.com>
10046 
10047     Set FSType when constructing FS in luks::get_filesystem_support()
10048     
10049     This is functionally identical, but is just to follow established coding
10050     pattern [1] of specifying the FSType when constructing struct FS, rather
10051     and setting it afterwards.  luks.cc was added after the aforementioned
10052     commit, but was being developed in parallel so was created [2] following
10053     the old coding pattern.
10054     
10055     [1] 1a4cefb9601de47a1d4fdd31d60be9e37fadda2d
10056         Initialise all struct FS members
10057     
10058     [2] 070d734e57e8c10cfc4264b34e8bd95bba7cf3ff
10059         Add busy detection of LUKS mapping (#760080)
10060 
10061 2018-07-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
10062 
10063     Recognise additional GRUB2 core.img signatures (!5)
10064     
10065     Bootinfoscript v0.77 (2018-06-10) added additional signatures to
10066     recognise GRUB2 core.img by.  Commit:
10067     
10068         https://github.com/arvidjaar/bootinfoscript/commit/9a00c1a8877c9693ef908211f3dfd264c6172986
10069         Add more core.img diskboot signatures
10070     
10071     Specifically the new signatures are:
10072         5256be63 - trustedgrub2 1.4
10073         5256be56 - diskboot.S with mjg TPM patches (e.g. in openSUSE
10074                    Tumbleweed)
10075     
10076     Add those signatures into GParted.
10077     
10078     Closes !5 - Recognise additional GRUB2 core.img signatures
10079 
10080 2018-06-24  Mike Fleetwood <mike.fleetwood@googlemail.com>
10081 
10082     Add CI job to test GParted on Ubuntu (!4)
10083     
10084     Closes !4 - Add GitLab CI jobs to build and test GParted
10085 
10086 2018-06-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
10087 
10088     Add CI job to build GParted on Ubuntu (!4)
10089     
10090     Closes !4 - Add GitLab CI jobs to build and test GParted
10091 
10092 2018-06-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
10093 
10094     Parameterise CI config ready for also using a Ubuntu image (!4)
10095     
10096     Prepare the GitLab Continuous Integration configuration for also
10097     building and testing GParted on a Ubuntu image.  The definition of the
10098     image and before_script, which so far specify the CentOS Docker image
10099     and how to install the required RPM packages, need to move from being
10100     top level nodes to being defined per job.  Namely within jobs
10101     'centos_build' and 'centos_test'.
10102     
10103     To avoid duplicating various nodes within multiple jobs, YAML anchors
10104     (&LABEL) and references (*LABEL) are used.  They are defined in ignored
10105     jobs, job names starting with a dot (.).
10106     
10107     Closes !4 - Add GitLab CI jobs to build and test GParted
10108 
10109 2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10110 
10111     Rename CI jobs to reflect that they use a CentOS Docker image (!4)
10112     
10113     Ready for adding additional Continuous Integration jobs using different
10114     distribution Docker images.  Rename thus:
10115         build -> centos_build
10116         test  -> centos_test
10117     
10118     Closes !4 - Add GitLab CI jobs to build and test GParted
10119 
10120 2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10121 
10122     Exclude unit test which fails in Docker CI image (!4)
10123     
10124     Fragment of the tests/test-suite.log from the Docker CI image showing
10125     details of the unit test failure:
10126     
10127         Running main() from gtest_main.cc
10128         [==========] Running 26 tests from 1 test case.
10129         [----------] Global test environment set-up.
10130         [----------] 26 tests from BlockSpecialTest
10131         ...
10132         [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
10133         test_BlockSpecial.cc:137: Failure
10134         Failed
10135         get_link_name(): Failed to open directory '/dev/disk/by-id'
10136         test_BlockSpecial.cc:168: Failure
10137         Failed
10138         follow_link_name(): Failed to resolve symbolic link ''
10139         test_BlockSpecial.cc:255: Failure
10140         Expected: (lnk.m_name.c_str()) != (bs.m_name.c_str()), actual: "" vs ""
10141         [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms)
10142         ...
10143         [==========] 26 tests from 1 test case ran. (1 ms total)
10144         [  PASSED  ] 25 tests.
10145         [  FAILED  ] 1 test, listed below:
10146         [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
10147     
10148          1 FAILED TEST
10149     
10150     So the code is trying to find a symbolic link to a block device to use
10151     in the test.  It is trying to read the directory /dev/disk/by-id to find
10152     a symbolic link, but the directory doesn't exist in the Docker CI image.
10153     
10154     The used directory was recently changed [1] to use one which existed on
10155     all distributions.  Docker images don't even have the /dev/disk
10156     directory.  Exclude just this specific test.
10157     
10158     [1] 7fe41480749c795dfb79daeba7b058cece2dfdd2
10159         Use /dev/disk/by-id/ to get device symlink in test_BlockSpecial
10160     
10161     Closes !4 - Add GitLab CI jobs to build and test GParted
10162 
10163 2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10164 
10165     Debug unit test failure in CI test job (!4)
10166     
10167     Recursively list all the files below /dev as part of the 'test' job as
10168     certain block device names are needed by the failing test_BlockSpecial
10169     unit test.
10170     
10171     The artifact captures all the files from the directory in which the CI
10172     script runs to build and test GParted.  It creates a ZIP file which can
10173     be downloaded after the job finishes, whether the job succeeds of fails.
10174     This is to capture logs from the failure of the test_BlockSpecial unit
10175     test.
10176     
10177     Closes !4 - Add GitLab CI jobs to build and test GParted
10178 
10179 2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10180 
10181     Add CI testing job on CentOS (!4)
10182     
10183     Add GitLab Continuous Integration job named 'test' which runs the
10184     GParted unit tests and distcheck.  Note that the job starts from a fresh
10185     official CentOS Docker image so also has to rebuild GParted too.
10186     
10187     So far this job fails on unit test test_BlockSpecial.  Fragment of the
10188     CI job log:
10189     
10190         make  check-TESTS
10191         make[2]: Entering directory `/builds/mfleetwo/gparted/tests'
10192         make[3]: Entering directory `/builds/mfleetwo/gparted/tests'
10193         PASS: test_dummy
10194         FAIL: test_BlockSpecial
10195         PASS: test_PasswordRAMStore
10196         PASS: test_PipeCapture
10197         make[4]: Entering directory `/builds/mfleetwo/gparted/tests'
10198         make[4]: Nothing to be done for `all'.
10199         make[4]: Leaving directory `/builds/mfleetwo/gparted/tests'
10200         ============================================================================
10201         Testsuite summary for gparted 0.31.0-git
10202         ============================================================================
10203         # TOTAL: 4
10204         # PASS:  3
10205         # SKIP:  0
10206         # XFAIL: 0
10207         # FAIL:  1
10208         # XPASS: 0
10209         # ERROR: 0
10210         ============================================================================
10211         See tests/test-suite.log
10212         Please report to https://bugzilla.gnome.org/enter_bug.cgi?product=gparted
10213         ============================================================================
10214     
10215     Closes !4 - Add GitLab CI jobs to build and test GParted
10216 
10217 2018-06-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10218 
10219     Create initial GitLab CI job which builds on CentOS (!4)
10220     
10221     Initial GitLab Continuous Integration configuration with a single job
10222     named 'build' which just confirms GParted can be built and installed on
10223     the latest official CentOS Docker image.
10224     
10225     Closes !4 - Add GitLab CI jobs to build and test GParted
10226 
10227 2018-07-02  Jordi Mas <jmas@softcatala.org>
10228 
10229     Update Catalan translation
10230 
10231 2017-10-09  Jordi Mas <jmas@softcatala.org>
10232 
10233     Fixes to Catalan translation
10234 
10235 2018-06-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
10236 
10237     Remove support for obsolete devkit-disks automount inhibitor
10238     
10239     Back in 2009 devicekit-disks package was renamed to udisks [1].  All
10240     supported distributions use udisks (or more recently udisks2).  None
10241     have the old devkit-disks command.  Therefore remove it from the GParted
10242     shell wrapper.
10243     
10244     [1] https://www.freedesktop.org/wiki/Software/DeviceKit-disks/
10245         "Note
10246         On December 1st 2009, DeviceKit-disks was renamed to udisks. This
10247         release is expected to appear in distributions released in the first
10248         half of 2010."
10249 
10250 2018-06-22  Daniel Mustieles <daniel.mustieles.contractor@bbva.com>
10251 
10252     Updated Spanish translation
10253 
10254 2018-06-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
10255 
10256     Fix LVM2 PV shrinking with lvm2 2.02.171 and later (#1)
10257     
10258     Shrinking an LVM2 Physical Volume on CentOS 7 with the latest
10259     lvm2 2.02.177 fails like this:
10260     
10261       Shrink /dev/sda9 from 1.00 GiB to 768.00 MiB
10262       * calibrate /dev/sda9
10263       * check file system on /dev/sda9 for errors and (if possib...(SUCCESS)
10264       * shrink file system                                         (ERROR)
10265         * lvm pvresize -v --setphysicalvolumesize 786432K '/dev/...(ERROR)
10266             0 physical volume(s) resized / 1 physical volume(s) not resized
10267     
10268             Wiping internal VG cache
10269             Wiping cache of LVM-capable devices
10270             /dev/sda9: Requested size 712.00 MiB is less than real size 1.00 GiB.  Proceed? [y/n]:[n]
10271             Physical Volume /dev/sda9 not resized.
10272     
10273     This upstream change to lvm2 [1] makes pvresize prompt for confirmation
10274     whenever the --setphysicalvolumesize option is used.  (The change was
10275     included in lvm2 2.02.171 and later, which is used in recent
10276     distributions.  The reporter found the issue on Ubuntu 18.04 LTS and I
10277     reproduced the issue on RHEL/CentOS 7.5).  The set size option has to be
10278     used when shrinking the PV before shrinking the partition therefore fix
10279     this issue by adding lvm common option --yes when using the set size
10280     option.
10281     
10282     [1] https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=cbc69f8c693edf0d1307c9447e2e66d07a04bfe9
10283         pvresize: Prompt when non-default size supplied.
10284     
10285     Closes #1 - Can't shrink LVM partition due to pvresize prompt
10286 
10287 2018-05-26  Mike Fleetwood <mike.fleetwood@googlemail.com>
10288 
10289     Clear previous LUKS unlock failure error before next attempt (#795617)
10290     
10291     After a failed LUKS unlock attempt the password entry dialog shows the
10292     error "Failed to open LUKS encryption".  Improve the user experience by
10293     clearing that error message at the start of the next attempt to avoid
10294     contradictory information with the main windows status of "Opening
10295     encryption on $PARTITION" whilst performing the next unlock attempt.
10296     
10297     Bug 795617 - Implement opening and closing of LUKS mappings
10298 
10299 2018-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
10300 
10301     After LUKS unlock failure select failed password (#795617)
10302     
10303     When the wrong LUKS password is entered and the [Unlock] button clicked,
10304     the wrong password is left in the entry box and focus remains on the
10305     [Unlocked] button.  Improve the user experience by selecting
10306     (highlighting) the whole of the wrong password ready for deletion or
10307     retyping and ensuring that the entry box always has focus.
10308     
10309     Just for completeness also programmatically make the password entry box
10310     have focus when the dialog box is created and first displayed, even
10311     though it gets this by default.
10312     
10313     Bug 795617 - Implement opening and closing of LUKS mappings
10314 
10315 2018-06-19  Piotr Drąg <piotrdrag@gmail.com>
10316 
10317     Avoid unnecessary string change
10318     
10319     Restore whitespace to previous version,
10320     so no translations need to be updated.
10321 
10322 2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
10323 
10324     Increment GParted Manual version
10325 
10326 2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
10327 
10328     Update SystemRescueCd URL in the GParted Manual
10329     
10330     http://www.sysresccd.org redirects to http://www.system-rescue-cd.org.
10331     Update the GParted Manual to the new address.
10332 
10333 2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
10334 
10335     Update URLs in the remaining files to https://gparted.org (#796411)
10336     
10337     Update URLs in the README file, man page, metadata files and polkit
10338     action file.
10339     
10340     Bug 796411 - Enhancements request - URL links
10341 
10342 2018-05-27  Mike Fleetwood <mike.fleetwood@googlemail.com>
10343 
10344     Update URLs in the app to https://gparted.org (#796411)
10345     
10346     We previously migrated our web site from http://gparted.org to
10347     https://gparted.org under:
10348         bug 786707 - gparted.org does not use HTTPS
10349     
10350     and updated URLs in the GParted Manual to match in commit:
10351         a8172ecb04afabd636e3ad3d6f6665af894516f1
10352         Convert Manual links to HTTPS where possible and update version
10353     
10354     Now update the URLs displayed in the GParted application too.
10355     
10356     Bug 796411 - Enhancements request - URL links
10357 
10358 2018-05-21  Mike Fleetwood <mike.fleetwood@googlemail.com>
10359 
10360     Rework scope of fat16:: and ntfs::Change_UUID_Warning vectors
10361     
10362     The Change_UUID_Warning vectors were fat16 and ntfs class member
10363     variables, but are only ever accessed in the get_custom_text() method.
10364     Make them local variables in get_custom_text() instead.  Static so that
10365     references to them can be returned.
10366 
10367 2018-05-19  Mike Fleetwood <mike.fleetwood@googlemail.com>
10368 
10369     Move the xfs_db -r flag to the start when reading XFS usage
10370     
10371     I completely missed that when reading XFS file system size and usage it
10372     was using the '-r' read-only flag to xfs_db because it was at the end of
10373     the string on the following line of code.  Move it to the start of the
10374     xfs_db command line, like it is when reading the file system label.
10375 
10376 2018-05-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
10377 
10378     Simplify from Gtk::Table to HBox in Partition Name dialog
10379     
10380     Same case as for FileSystem Label dialog before; the Partition Name
10381     dialog only has a single line of just 2 widgets.  Therefore switch to a
10382     simpler horizontal box widget to lay them out.
10383 
10384 2018-05-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
10385 
10386     Simplify from Gtk::Table to HBox in FileSystem Label dialog
10387     
10388     The FileSystem Label dialog only has a single line of just 2 widgets; a
10389     text label and entry box widget.  There is no need to use a multi-line
10390     capable table to hold this.  Switch to a simpler horizontal box widget.
10391     
10392     Note that this change is not related to porting to Gtk 3 and stopping
10393     using deprecated APIs because both HBox [1] and Table [2] are deprecated
10394     in Gtk 3.2 and Gtk 3.4 and replaced by Box with horizontal orientation
10395     and Grid respectively.
10396     
10397     [1] NEWS file from gtkmm 3.2, actually first released in gtkmm 3.1.6
10398         (unstable):
10399         https://git.gnome.org/browse/gtkmm/tree/NEWS?h=3.2.0#n91
10400             "Gtk:
10401             * All H* or V* specialized classes have been deprecated, to
10402               match the deprecations in the GTK+ C API. You should now
10403               set the orientation instead.
10404               This includes HBox, VBox, HButtonBox, VButtonBox, HPaned,
10405               VPaned, HScale, VScale,  HSeparator, VSeparator, HScrollbar
10406               and VScrollbar."
10407     
10408     [2] NEWS file from gtkmm 3.4, actually first released in gtkmm 3.3.2
10409         (unstable):
10410         https://git.gnome.org/browse/gtkmm/tree/NEWS?h=3.4.0#n162
10411             "* Deprecate Gtk::Table in favour of Gtk::Grid."
10412 
10413 2018-01-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
10414 
10415     Make get_custom_text() and get_generic_text() return by reference
10416     
10417     Replace return by value of const strings from
10418     FileSystem::get_custom_text() and get_generic_text() because that
10419     implies duplication of those strings.  Return a reference to constant
10420     strings instead.
10421 
10422 2018-05-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
10423 
10424     Recognise blkid identified BitLocker encrypted partitions (#795127)
10425     
10426     Future util-linux release after v2.32 will include this commit for blkid
10427     to recognise BitLocker encrypted partitions.  It is much better than
10428     GParted's inbuilt detection.
10429     
10430         https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=136f89ce5ed8cd159a1c56b5a775dada2363ecd3
10431         libblkid: add BitLocker detection
10432     
10433     Make GParted also recognise BitLocker encrypted partitions reported by
10434     blkid.
10435     
10436     Bug #795127 - Displayed Name is incorrect for bitlocker encrypted
10437                   partitions
10438 
10439 2018-06-13  Curtis Gedak <gedakc@gmail.com>
10440 
10441     Add Mike Fleetwood as GParted maintainer
10442 
10443 2018-05-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
10444 
10445     Add logo.png for automatic GitLab/GitHub project avatar
10446     
10447     Generated from GParted SVG icon using:
10448         rsvg -w 256 -h 256 data/icons/hicolor_apps_scalable_gparted.svg logo.png
10449 
10450 2018-05-21  Robert Ancell <robert.ancell@canonical.com>
10451 
10452     Fix null pointer check accidentally disabled (#796293)
10453     
10454     Compiling (with new enough g++) produces this warning:
10455     
10456         PasswordRAMStore.cc: In member function 'void GParted::PWStore::erase_all()':
10457         PasswordRAMStore.cc:177:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
10458           if ( protected_mem != NULL );
10459           ^~
10460         PasswordRAMStore.cc:193:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
10461            memset( protected_mem, '\0', ProtectedMemSize );
10462            ^~~~~~
10463     
10464     Looks like a stray semicolon...
10465     
10466     Bug 796293 - Fix null pointer check accidentally disabled
10467 
10468 2018-05-06  Piotr Drąg <piotrdrag@gmail.com>
10469 
10470     Update Polish translation
10471 
10472 2018-05-02  Rafael Fontenelle <rafaelff@gnome.org>
10473 
10474     Update Brazilian Portuguese translation
10475 
10476 2018-04-30  Marek Černocký <marek@manet.cz>
10477 
10478     Updated Czech translation
10479 
10480 2018-04-23  Mike Fleetwood <mike.fleetwood@googlemail.com>
10481 
10482     Change to insert or replace PasswordRAMStore::store() interface (#795617)
10483     
10484     Replace the insert() method (which reports an error when inserting a
10485     password with a key which already exists) with the store() method which
10486     replaces or inserts the password depending on whether the key already
10487     exists or not respectively.  There is also an optimisation that nothing
10488     is changed if the password to be replaced is the same as the one already
10489     stored.  The code in Win_GParted::open_encrypted_partition() is
10490     simplified now it doesn't have to implement this pattern of behaviour
10491     itself.
10492     
10493     Bug 795617 - Implement opening and closing of LUKS mappings
10494 
10495 2018-03-26  Mike Fleetwood <mike.fleetwood@googlemail.com>
10496 
10497     Report LUKS unlock errors into the password dialog (#795617)
10498     
10499     Reports generic GParted error "Failed to open LUKS encryption" on any
10500     failure unlocking the partition.  Choosing not to display cryptsetup
10501     reported errors because those messages and their translations are not
10502     under GParted control.
10503     
10504     Bug 795617 - Implement opening and closing of LUKS mappings
10505 
10506 2018-03-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10507 
10508     Stop copying password into insecure memory when getting entry (#795617)
10509     
10510     The underlying C coded Gtk Entry widget is careful to zero memory after
10511     use, allowing the widget to be safely used for password entry [1].
10512     However the C++ method Gtk::Entry::get_text() just takes the underlying
10513     C string from the Gtk Entry widget and copies it when constructing a
10514     Glib::ustring for the return value [2].
10515     
10516     So directly use the Gtk/C API to get the C string instead.
10517     
10518     [1] https://git.gnome.org/browse/gtk+/tree/gtk/gtkentrybuffer.c?h=3.22.28#n92
10519         See function trash_area() which zeros memory and its use in
10520         gtk_entry_buffer_normal_insert_text(),
10521         gtk_entry_buffer_normal_delete_text() and
10522         gtk_entry_buffer_finalize().
10523     
10524     [2] https://git.gnome.org/browse/gtkmm/tree/gtk/src/entry.hg?h=3.22.2#n104
10525         _WRAP_METHOD(Glib::ustring get_text() const, gtk_entry_get_text)
10526     
10527         https://git.gnome.org/browse/glibmm/tree/docs/internal/using_gmmproc.txt?h=2.46.1#n53
10528         _WRAP_METHOD(Glib::ustring METHOD const, FUNC) is processed to:
10529             Glib::ustring METHOD() const
10530             {
10531                 return Glib::convert_const_gchar_ptr_to_ustring(
10532                     FUNC(const_cast<GtkEntry*>(gobj())));
10533             }
10534     
10535         https://git.gnome.org/browse/glibmm/tree/glib/glibmm/utility.h?h=2.46.1#n82
10536             Glib::ustring convert_const_gchar_ptr_to_ustring(const char* str)
10537             {
10538                 return (str) ? Glib::ustring(str) : Glib::ustring();
10539             }
10540     
10541         So Gtk::Entry::get_text() calls Glib::ustring() constructor which
10542         copies the C string to create the Glib::ustring object returned.
10543     
10544     Bug 795617 - Implement opening and closing of LUKS mappings
10545 
10546 2018-02-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
10547 
10548     Keep password dialog open until successful unlock or cancellation (#795617)
10549     
10550     To keep password dialog open, just keep running it in a loop performing
10551     LUKS mapping unlock attempts with the entered passphrase until it
10552     succeeds or the dialog is cancelled or closed.  This is the same model
10553     that is already used for the File Support System dialog and how the
10554     [Rescan For Supported Actions] button is implemented.
10555     
10556     Also any error from attempting to open the LUKS mapping is no longer
10557     displayed in a separate error dialog or at all.  Will add some sort of
10558     error reporting into the password entry dialog in a following commit.
10559     
10560     Creates new method Win_GParted::open_encrypted_partition() which handles
10561     the non UI parts of attempting to open an encrypted partition.  Running
10562     "cryptsetup luksOpen" and updating the stored passphrase as needed.
10563     
10564     Bug 795617 - Implement opening and closing of LUKS mappings
10565 
10566 2017-10-22  Mike Fleetwood <mike.fleetwood@googlemail.com>
10567 
10568     Add password entry dialog and attempt LUKS unlock once (#795617)
10569     
10570     Initial addition of a password entry dialog.  Looks like:
10571     
10572         +------------------------------------------------+
10573         |           LUKS Passphrase /dev/sdb1            |
10574         +------------------------------------------------+
10575         | Enter LUKS passphrase to open /dev/sdb1        |
10576         | Passphrase:    [                             ] |
10577         |                                                |
10578         |                          [ Cancel ] [ Unlock ] |
10579         +------------------------------------------------+
10580     
10581     A standard Gtk Dialog is used to accept the password once, with any
10582     errors displayed in a separate error dialog afterwards.  This is poor UI
10583     design.  A password dialog should remain open for all authentication
10584     attempts and only close when successful or the dialog is cancelled or
10585     closed.  This UI design issue will be improved in following commits.
10586     
10587     Bug 795617 - Implement opening and closing of LUKS mappings
10588 
10589 2017-10-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
10590 
10591     Add closing LUKS mappings (#795617)
10592     
10593     Implement Close Encryption partition menu item.
10594     
10595     The Open Encryption action is not yet implemented and instead reports an
10596     error detailing the open encryption command.  A dialog needs to be
10597     written to accept the password entry and pass it to the open encryption
10598     command.
10599     
10600     Bug 795617 - Implement opening and closing of LUKS mappings
10601 
10602 2016-10-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
10603 
10604     Add unimplemented open/close encryption to the partition menu (#795617)
10605     
10606     Add new item to the partition menu to allow the user to open and close
10607     the LUKS mapping.  However for now the menu item is always disabled and
10608     there is no implementation behind it to actually open or close the LUKS
10609     mapping.  Fragment of the partition menu is now:
10610     
10611         ...
10612         Format to       >
10613         -----------------
10614         Open Encryption      <- New menu item
10615         Mount
10616         -----------------
10617         Name Partition
10618         ...
10619     
10620     Has to be two separate menu items to clearly represent to the user that
10621     LUKS mappings and file system mounting are two separate busy states.
10622     And also in the case of an open but unmounted file system to offer both
10623     actions; close encryption and mount file system.
10624     
10625     The text of the menu item automatically changes similarly to how it does
10626     for the Mount/Unmount, Swapon/Swapoff, Activate/Deactivate item
10627     depending on the state of the LUKS mapping.  For open LUKS mappings it
10628     will show "Close Encryption" and for all other cases (closed LUKS
10629     mapping or partition is not encrypted) "Open Encryption".  Again similar
10630     to how the default of "Mount" is shown for unallocated and unknown
10631     partitions.
10632     
10633     Bug 795617 - Implement opening and closing of LUKS mappings
10634 
10635 2016-10-25  Mike Fleetwood <mike.fleetwood@googlemail.com>
10636 
10637     Rename some Win_GParted members to *toggle_fs_busy* (#795617)
10638     
10639     In preparation for adding the ability to toggle the encryption busy
10640     state (open/close the encryption volume), rename existing members to
10641     reflect that they are related to changing the file system state.  (Swap
10642     and LVM2 Physical Volumes are handled as file systems by GParted).
10643     
10644     class Win_GParted renaming:
10645         MENU_TOGGLE_BUSY             -> MENU_TOGGLE_FS_BUSY
10646         allow_toggle_busy_state()    -> allow_toggle_fs_busy_state()
10647         toggle_busy_state()          -> toggle_fs_busy_state()
10648         check_toggle_busy_allowed()  -> check_toggle_fs_busy_allowed()
10649     
10650     Bug 795617 - Implement opening and closing of LUKS mappings
10651 
10652 2017-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
10653 
10654     Stop using shell when reading jfs file system usage (#795617)
10655     
10656     Replace echoing "dm" into jfs_debugfs via a shell command to directly
10657     writing "dm" to the input of the jfs_debug command.  One less use of the
10658     shell.
10659     
10660     Bug 795617 - Implement opening and closing of LUKS mappings
10661 
10662 2017-10-20  Mike Fleetwood <mike.fleetwood@googlemail.com>
10663 
10664     Add ability for small writes to stdin of child processes (#795617)
10665     
10666     As discussed in "LUKS password handling, threats and preventative
10667     measures" [1] GParted must be able to pass LUKS passphrases to
10668     cryptsetup via standard input to avoid having to write passwords to the
10669     file system and deal with additional security requirements.  Therefore
10670     add a way to write input into created child processes.  For small
10671     amounts of input, writing up to the pipe buffer capacity won't block
10672     [2].  This is 64K on versions of Linux in any currently supported
10673     distributions.
10674     
10675     [1] LUKS password handling, threats and preventative measures
10676         https://bugzilla.gnome.org/show_bug.cgi?id=627701#c56
10677     
10678         GParted must not become a password manage so it must never save
10679         LUKS passwords to disk across separate invocations of GParted.
10680         ...
10681     
10682         GParted should avoid writing a temporary file containing the LUKS
10683         password as it introduces extra complexity with trying to safely
10684         handle and erase file content.  Instead GParted must
10685         programmatically pass the LUKS password via standard input to the
10686         cryptsetup command.
10687     
10688     [2] pipe(7) manual page:
10689     
10690         Pipe capacity
10691             A pipe has a limited capacity.  If the pipe is full, then a
10692             write(2) will block or fail, depending on whether the O_NONBLOCK
10693             flag is set (see below).  ...
10694     
10695             In Linux versions before 2.6.11, the capacity of a pipe was the
10696             same as the system page size (e.g., 4096 bytes on i386).  Since
10697             Linux 2.6.11, the pipe capacity is 65536 bytes.
10698     
10699     Bug 795617 - Implement opening and closing of LUKS mappings
10700 
10701 2017-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
10702 
10703     Simplify obtaining address of password memory for unit tests (#795617)
10704     
10705     Use private access into the PasswordRAMStore class to directly obtain
10706     the address of the locked memory, rather than inferring it from the
10707     address of the first stored password.  This simplifies
10708     PasswordRAMStoreTest::SetUpTestCase() and avoids encoding most of the
10709     implementation knowledge that the first password will be stored at the
10710     start of the protected memory.
10711     
10712     Bug 795617 - Implement opening and closing of LUKS mappings
10713 
10714 2017-11-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
10715 
10716     Add unit testing of erasing all passwords (#795617)
10717     
10718     Test that all passwords are zeroed by PasswordRAMStore::erase_all(), the
10719     same method as used in the PasswordRAMStore destructor.
10720     
10721     Bug 795617 - Implement opening and closing of LUKS mappings
10722 
10723 2017-11-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
10724 
10725     Split out erasing all passwords into a separate method (#795617)
10726     
10727     Move zeroing of the locked memory into separate PWStore::erase_all()
10728     private method.  Then use this in the PWStore destructor.  This is so
10729     that zeroing of all passwords can be unit tested independently of
10730     destructing the singleton PWStore object.
10731     
10732     Bug 795617 - Implement opening and closing of LUKS mappings
10733 
10734 2017-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>
10735 
10736     Add unit tests for PasswordRAMStore module (#795617)
10737     
10738     As noted in comments:
10739     
10740     1) This is white box testing because it uses implementation knowledge
10741        to look through the API to the internals of the password store.
10742     
10743     2) It is not currently possible to test that the passwords are zeroed
10744        when the store is destroyed.
10745        However zeroing of memory is being tested when individual passwords
10746        are erased.
10747     
10748     Bug 795617 - Implement opening and closing of LUKS mappings
10749 
10750 2017-10-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
10751 
10752     Add PasswordRAMStore module (#795617)
10753     
10754     Application level requirements for secure password management were set
10755     out in "LUKS password handling, threats and preventative measures" [1].
10756     
10757     The requirements are:
10758     1) Passwords are stored in RAM and are not allowed to be paged to swap.
10759        (However hibernating with GParted still running will write all of RAM
10760        to swap).
10761     2) Passwords are wiped from RAM when no longer needed.  When each
10762        password is no longer needed and when GParted closes.
10763     3) Passwords are referenced by unique key.  Recommend using LUKS UUIDs
10764        as the unique key.
10765        (Each LUKS password should only ever need to be entered once for each
10766        execution of GParted.  Therefore the passwords can't be stored in any
10767        of the existing data structures such as Partitions or LUKS_Info cache
10768        because all of these are cleared and reloaded on each device
10769        refresh).
10770     
10771     There seems to be two possible implementation methods: use an existing
10772     library to provide secure memory handling, or write our own.
10773     Libgcrypt [2] and libsodium [3] cryptographic libraries both provide
10774     secure memory handling.  (Secure memory is quite simple really, some
10775     virtual memory locked into RAM which is zeroed when no longer needed).
10776     Linking to an encryption library just to provide secure memory seems
10777     like using a sledge hammer to crack a nut.  Also because of requirement
10778     (3) above a module is needed to "own" the pointers to the passwords in
10779     the secure memory.  Managing the secure memory ourselves is probably no
10780     more code that that needed to interface to libgcrypt.  Therefore handle
10781     the secure memory ourselves.
10782     
10783     So far the module is only compiled.  It is not used anywhere in GParted.
10784     
10785     [1] LUKS password handling, threats and preventative measures
10786         https://bugzilla.gnome.org/show_bug.cgi?id=627701#c56
10787     
10788     [2] libgcrypt general purpose cryptographic library, as used in GNU
10789         Privacy Guard
10790         https://gnupg.org/related_software/libgcrypt/
10791     
10792     [3] libsodium crypto library
10793         https://download.libsodium.org/doc/
10794     
10795     Bug 795617 - Implement opening and closing of LUKS mappings
10796 
10797 2018-03-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
10798 
10799     Use /dev/disk/by-id/ to get device symlink in test_BlockSpecial
10800     
10801     Found that older but still supported distributions Debian 8 and
10802     Ubuntu 14.04 LTS don't have directory /dev/disk/by-path/.  This is used
10803     by the BlockSpecial unit test as a source of a symbolic link to a block
10804     special device.
10805     
10806     This causes the unit test to fail like this:
10807     
10808         $ cd tests
10809         $ ./test_BlockSpecial
10810         ...
10811         [ RUN      ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
10812         test_BlockSpecial.cc:137: Failure
10813         Failed
10814         get_link_name(): Failed to open directory '/dev/disk/by-path'
10815         test_BlockSpecial.cc:168: Failure
10816         Failed
10817         follow_link_name(): Failed to resolve symbolic link ''
10818         test_BlockSpecial.cc:255: Failure
10819         Expected: (lnk.m_name.c_str()) != (bs.m_name.c_str()), actual: "" vs ""
10820         [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches (0 ms)
10821         ...
10822         [  FAILED  ] 1 test, listed below:
10823         [  FAILED  ] BlockSpecialTest.NamedBlockSpecialObjectBySymlinkMatches
10824     
10825          1 FAILED TEST
10826     
10827     Which in turn causes make check and make distcheck to fail.
10828     
10829     Use directory /dev/disk/by-id/ instead as it always exists.
10830 
10831 2018-03-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
10832 
10833     Increase minimum required gtkmm to 2.16.0 (#794253)
10834     
10835     Increase the minimum required version of gtkmm to 2.16.0, thus allowing
10836     removal of HAVE_GTK_SHOW_URI autoconf definition and associated fallback
10837     code.
10838     
10839     Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
10840                  versions to glibmm 2.14.0 and gtkmm 2.16.0
10841 
10842 2018-03-07  Mike Fleetwood <mike.fleetwood@googlemail.com>
10843 
10844     Increase minimum required gtkmm to 2.11.1 (#794253)
10845     
10846     Increase the minimum required version of gtkmm to 2.11.1, thus allowing
10847     removal of:
10848      *  HAVE_SET_DEFAULT_ICON_NAME autoconf definition and associated
10849         optional code.
10850      *  INSTALL_PIXMAPS_DIR automake conditional and associated make
10851         instructions.
10852     
10853     This is reversing these 3 commits, except for the higher minimum gtkmm
10854     version:
10855      1) a04210788399736ff7f097cb75650ebcbd0a4950
10856         Only use Gtk::Window::set_default_icon_name method when available (#695279)
10857      2) b09d6035cdca90debb145628b0c62a0213ee1225
10858         Add fallback method for specifying GParted icon (#695279)
10859      3) d6baac254677b7863af413a38f382e9a2e0252bd
10860         Only install fallback icon when required (#695279)
10861     
10862     Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
10863                  versions to glibmm 2.14.0 and gtkmm 2.16.0
10864 
10865 2018-03-06  Mike Fleetwood <mike.fleetwood@googlemail.com>
10866 
10867     Raise minimum required glibmm version to 2.14.0 (#794253)
10868     
10869     Increase the minimum required version of glibmm to 2.14.0, thus allowing
10870     removal of the HAVE_GLIB_REGEX autoconf definition and associated
10871     conditional code.  This is reversing commit, except for the new glibmm
10872     minimum check:
10873     
10874         456932846bfbfbd77bbf49165b9eb6c2b84e0da6
10875         Implement fallback if Glib::Regex class is missing (#695279)
10876     
10877     Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
10878                  versions to glibmm 2.14.0 and gtkmm 2.16.0
10879 
10880 2018-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
10881 
10882     Simplify ext2::get_filesystem_support() with regard ext4 support (#794253)
10883     
10884     E2fsprogs 1.41.0 (from 10 July 2008) first included ext4 support [1].
10885     As RHEL / CentOS 6 is now the oldest supported distribution, and that
10886     includes e2fsprogs 1.41.12 (from 22 August 2009) [2] all the e2fs
10887     programs support ext4 so it is no longer necessary to also depend on
10888     finding mkfs.ext4 before enabling each supported capability for ext4.
10889     This makes the ext2::get_filesystem_support() look like all the others
10890     in which each supported capability only depends on the presence of the
10891     relevant file system specific command.
10892     
10893     [1] Release notes for the e2fsprogs package / E2fsprogs 1.41.0
10894         http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.41.0
10895     
10896     [2] pkgs.org > CentOS 6 > CentOS x86_64 > e2fsprogs
10897         https://centos.pkgs.org/6/centos-x86_64/e2fsprogs-1.41.12-23.el6.x86_64.rpm.html
10898     
10899     Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
10900                  versions to glibmm 2.14.0 and gtkmm 2.16.0
10901 
10902 2018-03-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
10903 
10904     Remove checks for e4fsprogs commands (#794253)
10905     
10906     PATCHSET OVERVIEW:
10907     
10908     As of 31 March 2017 RHEL / CentOS 5 reached the end of their support
10909     [1][2].  Therefore remove code which supports them.  This makes RHEL /
10910     CentOS 6 the oldest supported distribution.  So the minimum required
10911     versions of glibmm and gtkmm can be increased dropping some autoconf
10912     checks and conditional code supporting older versions of these
10913     libraries.  This will undo the bulk of these these previous bug fixes:
10914     
10915     * GParted 0.21.0
10916       Bug 738706 - Add support for ext4 on RHEL/CentOS 5.x
10917     
10918     * GParted 0.16.1
10919       Bug 695279 - Fix GParted doesn't compile on RHEL / CentOS 5.9
10920     
10921     [1] Red Hat Enterprise Linux Life Cycle
10922         https://access.redhat.com/support/policy/updates/errata#Life_Cycle_Dates
10923     
10924     [2] Subject: CentOS Linux 5 EOL
10925         https://lists.centos.org/pipermail/centos-announce/2017-April/022350.html
10926     
10927     THIS PATCH:
10928     
10929     Remove checks for e4fsprogs commands, removing support for ext4 on
10930     RHEL / CentOS 5.x.  This is reverting earlier commit:
10931         f672f68863d36972c5fb28d6592e47ca790708dd
10932         Check for e4fsprogs commands for ext4 support on RHEL/CentOS 5.x (#738706)
10933     
10934     Mkfs_cmd member variable is being kept as a convenience so that it is
10935     created once rather than on each use.  Also note that as it is a
10936     Glib::ustring type object, it's constructor will be called which will
10937     initialise it to the empty string so it doesn't need initialising to the
10938     empty string in the initialiser list of the ext2() constructor itself.
10939     
10940     Bug 794253 - Desupport RHEL / CentOS 5 and raise minimum required
10941                  versions to glibmm 2.14.0 and gtkmm 2.16.0
10942 
10943 2018-03-19  Andre Klapper <a9016009@gmx.de>
10944 
10945     Fix broken markup in Romanian user docs translation
10946 
10947 2018-03-19  Aurimas Černius <aurisc4@gmail.com>
10948 
10949     Updated Lithuanian translation
10950 
10951 2018-03-19  Curtis Gedak <gedakc@gmail.com>
10952 
10953     Append -git to version for continuing development
10954 
10955 2018-03-19  Curtis Gedak <gedakc@gmail.com>
10956 
10957     ==========   gparted-0.31.0   ==========
10958 
10959 2018-03-19  Curtis Gedak <gedakc@gmail.com>
10960 
10961     Update copyright year
10962 
10963 2018-03-19  Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>
10964 
10965     Update Latvian translation
10966 
10967 2018-03-18  Milo Casagrande <milo@ubuntu.com>
10968 
10969     Update Italian translation
10970 
10971 2018-03-13  Trần Ngọc Quân <vnwildman@gmail.com>
10972 
10973     Updated Vietnamese translation
10974     
10975     Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
10976 
10977 2018-03-12  Claude Paroz <claude@2xlibre.net>
10978 
10979     Updated French translation
10980 
10981 2018-03-11  Anders Jonsson <anders.jonsson@norsjovallen.se>
10982 
10983     Update Swedish translation
10984 
10985 2018-03-10  Alan Mortensen <alanmortensen.am@gmail.com>
10986 
10987     Updated Danish translation
10988 
10989 2018-03-10  Mario Blättermann <mario.blaettermann@gmail.com>
10990 
10991     Update German translation
10992 
10993 2018-03-04  Balázs Úr <balazs@urbalazs.hu>
10994 
10995     Update Hungarian translation
10996 
10997 2018-03-03  Baurzhan Muftakhidinov <baurthefirst@gmail.com>
10998 
10999     Update Kazakh translation
11000 
11001 2018-03-03  Daniel Șerbănescu <daniel@serbanescu.dk>
11002 
11003     Update Romanian translation
11004 
11005 2018-03-02  GNOME Translation Robot <gnome-sysadmin@gnome.org>
11006 
11007     Update Dutch translation
11008 
11009 2018-02-24  Piotr Drąg <piotrdrag@gmail.com>
11010 
11011     Fix Spanish translation header
11012 
11013 2018-02-22  Daniel Mustieles <daniel.mustieles.contractor@bbva.com>
11014 
11015     Updated Spanish translation
11016 
11017 2018-02-17  Мирослав Николић <miroslavnikolic@rocketmail.com>
11018 
11019     Updated Serbian translation
11020 
11021 2018-02-09  Kukuh Syafaat <syafaatkukuh@gmail.com>
11022 
11023     Update Indonesian translation
11024 
11025 2018-02-01  Mike Fleetwood <mike.fleetwood@googlemail.com>
11026 
11027     Remove deprecated USE_GNOME2_MACROS from autogen.sh
11028     
11029     Use of USE_GNOME2_MACROS is deprecated in GNOME 3 and produced this
11030     warning:
11031     
11032         $ ./autogen.sh
11033         /usr/bin/gnome-autogen.sh
11034         ...
11035         ***Warning*** USE_GNOME2_MACROS is deprecated, you may remove it from autogen.sh
11036         ...
11037     
11038     It's use appears to have been removed first from GNOME 2.8 with this
11039     commit from 2004:
11040     
11041         https://git.gnome.org/browse/gnome-common/commit/?id=ea9e85851445efa0135c3f8d08c3d1ea53760d91
11042         delete some files that were unused after the reorganisation
11043     
11044     The oldest supported distribution is RHEL / CentOS 6 which is using
11045     gnome-common-2.28.0 from 2009.  Therefore unconditionally remove the
11046     USE_GNOME2_MACROS setting.
11047     
11048     Also confirmed that it makes no difference by running ./autogen.sh with
11049     and without USE_GNOME2_MACROS being set.  The produced GParted build
11050     trees were the same.  Therefore the release and executable can't be
11051     affected.
11052 
11053 2018-01-30  Curtis Gedak <gedakc@gmail.com>
11054 
11055     Reduce dependency on scrollkeeper (#743318)
11056     
11057     Scrollkeeper and the associated OMF catalog files are used by the
11058     GNOME 2 version of yelp to display the GParted help manual.  To see how
11059     this works try the following command:
11060     
11061       yelp ghelp:gparted
11062     
11063     GNOME version 3 and higher yelp do not require scrollkeeper or the OMF
11064     catalog files to properly display the GParted help manual.  And in fact
11065     GNOME 3 deprecated the GNOME 2 method of building and installing GNOME
11066     help documents altogether; including use of GNOME_DOC_INIT autoconf
11067     macro, the gnome-doc-utils package and use of scrollkeeper.
11068     
11069       [GNOME 3] GNOME Goal: Port To New Documentation Infrastructure
11070       https://wiki.gnome.org/Initiatives/GnomeGoals/NewDocumentationInfrastructure
11071     
11072     Further, the next release of Debian, Debian 10 (Buster), will be
11073     removing the scrollkeeper / rarian package.
11074     
11075       rarian: Don't release with Buster
11076       https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=885657
11077     
11078     GParted is still a GNOME 2 app using GNOME 2 documentation build system
11079     using autoconf GNOME_DOC_INIT macro.
11080     
11081       [GNOME 2] Migrating your documentation to gnome-doc-utils
11082       https://wiki.gnome.org/Projects/GnomeDocUtils/MigrationHowTo
11083     
11084     This is needed to build GParted documentation on still supported GNOME 2
11085     distributions RHEL / CentOS 6.  So avoid requiring deprecated
11086     scrollkeeper on GNOME 3 by automatically disabling scrollkeeper database
11087     updates when the scrollkeeper-update command is not available.
11088     
11089       Executable          | Configure option used  | Use scrollkeeper
11090       scrollkeeper-update | on command line        | when building help
11091       exists?             |                        | for GParted?
11092       --------------------+------------------------+-------------------
11093       Yes                 | <none>                 | Yes
11094       Yes                 | --enable-scrollkeeper  | Yes
11095       Yes                 | --disable-scrollkeeper | No
11096                           |                        |
11097       No                  | <any>                  | No
11098     
11099     Note that because GParted is still using the GNOME 2 documentation build
11100     system it still builds and installs OMF files.  It is just that they are
11101     not required with GNOME 3 yelp and this commit automatically disables
11102     updating the scrollkeeper database when the scrollkeeper-update command
11103     is not available.
11104     
11105     Bug 743318 - configure script missing check for scrollkeeper dependency
11106 
11107 2018-01-10  Mike Fleetwood <mike.fleetwood@googlemail.com>
11108 
11109     Add comment about needing to compute encryption overhead in activate_format()
11110     
11111     To explain why just using the size of the LUKS header won't always be
11112     correct.
11113 
11114 2018-01-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
11115 
11116     Move struct FS and FS_Limits into FileSystem.h
11117     
11118     Struct FS and struct FS_Limits are strongly related to the FileSystem
11119     class, both being return values from members and associated with storing
11120     file system attributes.  Move their definitions from Utils.h into
11121     FileSystem.h.
11122 
11123 2018-01-02  Mike Fleetwood <mike.fleetwood@googlemail.com>
11124 
11125     Rename enum FILESYSTEM to FSType
11126     
11127     There are too many different types of things named "filesystem" in the
11128     GParted code with the potential to cause confusion.  Namely:
11129     
11130         std::vector<FS> FILESYSTEMS
11131                                   Vector of file system capabilities.
11132     
11133         class FileSystem          Base class interfacing to file system
11134                                   specific executables for querying and
11135                                   modification.
11136     
11137         enum FILESYSTEM           Symbolic constants representing each file
11138                                   system type.
11139     
11140     Many recent written or re-written functions already used a variable
11141     named fstype.  Rename enum FILESYSTEM to enum FSType to clearly
11142     distinguish it from the other things with very similar names.  Only
11143     changing the name of the enumeration, not the name of variables of that
11144     type too because that is a lot more lines of code and those can be
11145     changed when the relevant code is re-written.
11146 
11147 2018-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
11148 
11149     Fix cannot format error dialog which always reported the file system as encrypted
11150     
11151     Try to format an existing partition with a file system which doesn't
11152     fit.  The error dialog reporting the partition as too small or too large
11153     always claimed the file system was encrypted, whether it was or not.
11154     For example trying to format a 128 MiB partition as btrfs produces this
11155     error dialog:
11156     
11157         (-) Cannot format this file system to [Encrypted] btrfs
11158             A [Encrypted] btrfs file system requires
11159             a partition of at least 256.00 MiB.
11160                                                        [  OK  ]
11161     
11162     This commit:
11163         88136c96d7dd8576963c2e62eb2e9c85f5bff026
11164         Extend functions generating encrypted file system string (#774818)
11165     just completely missed handling the case for non-encrypted file systems
11166     in Utils::get_filesystem_string().  Add the missed code.
11167 
11168 2018-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
11169 
11170     Extract common code into GParted_Core::get_filesystem_limits() (#787204)
11171     
11172     There are multiple repetitions of the same code getting a FileSystem
11173     object, checking for NULL and then calling the file system specific
11174     get_filesystem_limits().  Extract that into a common function.
11175     
11176     GParted_Core::get_filesystem_limits() can't use the file system from the
11177     passed Partition object because that is the current file system which
11178     will be different from the intended file system for new and format
11179     operations.  So would look up the wrong derived FileSystem specific
11180     object and call the wrong get_filesystem_limits().  Hence still needing
11181     fstype as a separate parameter to pass the intended file system.
11182     
11183     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11184 
11185 2018-01-17  Mike Fleetwood <mike.fleetwood@googlemail.com>
11186 
11187     Set dynamic UDF file system size limits (#787204)
11188     
11189     UDF file system minimum and maximum size limits are defined in terms of
11190     numbers of file system blocks.  So when resizing an existing file system
11191     compute the byte size limits from the existing UDF file system's block
11192     size.  Alternatively when creating a new UDF file system use the
11193     device's sector size as the multiplier instead.
11194     
11195     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11196 
11197 2018-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
11198 
11199     Pass Partition object to get_filesystem_limits() (#787204)
11200     
11201     As described in the previous commit, this is so that file system
11202     specific implementations can dynamically determine size limits based on
11203     Partition object attributes: such as the device sector size and the file
11204     system block size.  (Assuming set_used_sectors() sets
11205     partition.fs_block_size for the type of file system in question).
11206     
11207     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11208 
11209 2018-01-16  Mike Fleetwood <mike.fleetwood@googlemail.com>
11210 
11211     Reorder code in Win_GParted::activate_paste() (#787204)
11212     
11213     Background information about UDF is that when creating a file system
11214     it's block size must match the underlying device's sector size.  For
11215     optical media like CDs and DVDs that is 2K.  For hard drives that is
11216     usually 512 bytes or 4K.  However if a UDF file system has been copied
11217     from a device with a different sector size the UDF block size won't
11218     match the sector size.  Linux will happily mount such UDF file system.
11219     
11220     Therefore the derived udf::get_filesystem_limits() will need access to
11221     the file system block size when determining the size limits of an
11222     existing UDF file system being resized and use the device sector size
11223     when a new UDF file system is being created.  All this can be queried
11224     from an appropriate Partition object passed to get_filesystem_limits().
11225     All the calls to get_filesystem_limits() have an appropriate Partition
11226     object available already, except in Win_GParted::activate_reformat()
11227     when composing a format operation.  Or more correctly
11228     activate_reformat() constructs temp_ptn, a suitable Partition object,
11229     including with fs_block_size member defaulting to -1 indicating not a
11230     resize, but not until after the file system size limits had been checked
11231     and get_filesystem_limits() called.
11232     
11233     Therefore reorder the code in activate_paste() so that the file system
11234     size limits are checked after the wanted Partition object has been
11235     created.  No functional change with this commit.
11236     
11237     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11238 
11239 2018-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
11240 
11241     Remove struct FS members .MIN & .MAX (#787204)
11242     
11243     All the code has been switched to call get_filesystem_limits() and use
11244     struct FS_Limits.  Remove struct FS members .MIN & .MAX.
11245     
11246     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11247 
11248 2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
11249 
11250     Use struct FS_Limits in Win_GParted::activate_format() (#787204)
11251     
11252     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11253 
11254 2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
11255 
11256     Use struct FS_Limits in GParted_Core::create() (#787204)
11257     
11258     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11259 
11260 2018-01-15  Mike Fleetwood <mike.fleetwood@googlemail.com>
11261 
11262     Switch to using struct FS_Limits inside Dialog_Partition_New (#787204)
11263     
11264     Change Dialog_Partition_New to use a fs_limits rather than struct FS
11265     and .MIN and .MAX.  No passing of struct FS_Limits required.  Just use
11266     the FILESYSTEMS vector of struct FS to provide the file system type and
11267     look up it's size limits each time the selection changes.
11268     
11269     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11270 
11271 2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
11272 
11273     Query and pass struct FS_Limits into Dialog_Partition_Resize_Resize_Move (#787204)
11274     
11275     Refactor Win_GParted::activate_resize() to query the file system size
11276     limits using the new get_filesystem_limits() method and pass those
11277     limits into the dialog class as struct FS_Limits.
11278     
11279     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11280 
11281 2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
11282 
11283     Switch to using struct FS_Limits inside Dialog_Partition_Resize_Move (#787204)
11284     
11285     Changes the internal code in Dialog_Partition_Resize_Move to use
11286     fs_limits instead of fs.MIN and fs.MAX.  The limits are still passed
11287     into the constructor via struct FS and it's members .MIN and .MAX but
11288     immediately used to assign to fs_limits.
11289     
11290     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11291 
11292 2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
11293 
11294     Query and pass struct FS_Limits into Dialog_Partition_Copy (#787204)
11295     
11296     Refactor Win_GParted::activate_paste() to query the file system size
11297     limits using the new get_filesystem_limits() method and pass those
11298     limits into the the dialog class as struct FS_Limits.
11299     
11300     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11301 
11302 2018-01-12  Mike Fleetwood <mike.fleetwood@googlemail.com>
11303 
11304     Switch to using struct FS_Limits inside Dialog_Partition_Copy (#787204)
11305     
11306     Adds working copy fs_limits member into common Dialog_Base_Partition
11307     class.  Changes the internal code in Dialog_Partition_Copy class to use
11308     fs_limits instead of fs.MIN and fs.MAX.  The limits are still passed
11309     into the constructor via object of struct FS and it's members .MIN and
11310     .MAX but immediately used to assign to the fs_limits member.
11311     
11312     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11313 
11314 2018-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
11315 
11316     Assign to duplicate FS_Limits (#787204)
11317     
11318     Duplicate the assignment of file system size limits into
11319     struct FS_Limits, matching the fixed values currently assigned to
11320     struct FS members .MIN and .MAX.
11321     
11322     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11323 
11324 2018-01-11  Mike Fleetwood <mike.fleetwood@googlemail.com>
11325 
11326     Create separate file system limits structure and getter method (#787204)
11327     
11328     PATCH SET OVERVIEW:
11329     
11330     Currently the supported actions of each file system and their size
11331     limits are stored in struct FS objects.  These are created by calling
11332     file system specific derived implementations of
11333     FileSystem::get_filesystem_support().  This happens when GParted is
11334     started or when a when a rescan for supported actions is performed.  The
11335     file system size limits are expressed as a fixed number of bytes.
11336     
11337     The maximum UDF file system size is specified in terms of file system
11338     block size units.  Also the file system block size must match the sector
11339     size of the underlying device.  Typically 2K for optical media and 512
11340     bytes or 4K for hard drives.
11341     
11342     Therefore GParted can't properly express the true UDF file system size
11343     limits because they depend on the block size of an existing UDF file
11344     system or the sector size of the device for new UDF file systems.  In
11345     fact other file systems such as EXT2/3/4 and XFS actually express their
11346     maximum file system size in terms of numbers of file system blocks but
11347     these tend to always be 4K and don't have to match the sector size of
11348     the underlying device, so fixed byte values tend to suffice.
11349     
11350     To update GParted for this, first separate file system size limits from
11351     struct FS into struct FS_Limits and provide new
11352     FileSystem::get_filesystem_limits() method to allow the limits to be
11353     queried independently of the calls to get_filesystem_support().
11354     Second, pass Partition objects and allow derived get_filesystem_limits()
11355     implementations.
11356     
11357     THIS PATCH:
11358     
11359     Just creates a separate structure storing fixed value file system
11360     minimum and maximum size limits along with getter method
11361     get_filesystem_limits().
11362     
11363     Bug 787204 - Minimum and maximum size of the UDF partition/disk
11364 
11365 2018-01-28  Marek Cernocky <marek_cernocky@conel.cz>
11366 
11367     Updated Czech translation
11368 
11369 2018-01-08  Piotr Drąg <piotrdrag@gmail.com>
11370 
11371     Update Polish translation
11372 
11373 2018-01-06  Rafael Fontenelle <rafaelff@gnome.org>
11374 
11375     Update Brazilian Portuguese translation
11376 
11377 2018-01-04  gogo <trebelnik2@gmail.com>
11378 
11379     Update Croatian translation
11380 
11381 2018-01-02  Pali Rohár <pali.rohar@gmail.com>
11382 
11383     Use external tools udfinfo and udflabel for UDF file system (#792052)
11384     
11385     Those external tools were introduced in version 2.0 of udftools package
11386     and can show or change UDF label, UDF uuid and can provide information
11387     needed for counting total/free sectors.
11388     
11389     Bug 792052 - Add support for changing UDF label/uuid and show disk usage
11390 
11391 2017-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
11392 
11393     Rename function and reword text for rollback of failed file system move
11394     
11395     To better reflect specifically that it is a failed (internally
11396     implemented) file system move which is being rolled back.
11397 
11398 2017-12-30  Mike Fleetwood <mike.fleetwood@googlemail.com>
11399 
11400     Fix rollback when growing a partition by more than twice fails (#791875)
11401     
11402     Attempt to grow a partition to more than twice it's size.  If committing
11403     that change to the partition fails in such a way that the new larger
11404     partition boundaries are not written to the disk drive then rolling back
11405     will fail with libparted error:
11406         Can't have overlapping partitions.
11407     
11408     Example operation details:
11409     
11410         Grow /dev/sdb8 from 1.00 GiB to 2.20 GiB
11411         * calibrate /dev/sdb8                                      (SUCCESS)
11412         * check file system on /dev/sdb8 for errors and (if poss...(SUCCESS)
11413         * grow partition from 1.00 GiB to 2.20 GiB                 (ERROR)
11414         * attempt to rollback failed change to the partition       (ERROR)
11415             original start: 7350272
11416             original end:   9447423
11417             original size:  2097152 (1.00 GiB)
11418           * libparted messages                                     (ERROR)
11419               Can't have overlapping partitions.
11420     
11421     What happened is that resize_move_partition() passed the new Partition
11422     object to resize_move_partition_implement() as the source partition for
11423     the rollback, and than called ped_disk_partition_by_sector() with a
11424     sector in the middle to identify the partition to be changed.  However
11425     the new partition was never written to the drive so in the middle was
11426     outside the old smaller partition.  Therefore libparted identified empty
11427     space after the partition, rather than the partition itself, as the
11428     intended target so when ped_disk_set_partition_geom() was called it
11429     reported error "Can't have overlapping partitions" because it thought
11430     another partition was being created with the same boundaries as the old
11431     partition, rather than the boundaries of the old partition being
11432     updated.
11433     
11434     The same error also occurs when rolling back a failed partition change
11435     as part of a move operation when the middle of the new partition falls
11436     outside of the boundaries of the old partition.
11437     
11438     Fix by making a temporary Partition object from the intersection of the
11439     old and new partition boundaries just to be used to identify the
11440     partition being changed to libparted.  As this is only rolling back a
11441     single step adjusting the partition boundaries as part of a resize
11442     and/or move operation, the old and new partition boundaries must
11443     intersect (and in fact that intersection contains the file system data).
11444     
11445     Bug 791875 - Rollback specific failed partition change steps
11446 
11447 2017-12-18  Mike Fleetwood <mike.fleetwood@googlemail.com>
11448 
11449     Enable failed partition change rollback for selected steps (#791875)
11450     
11451     The general rule is that:
11452     1) For a partition change step BEFORE a file system change step,
11453        rollback on failure;
11454     2) For a partition change step AFTER a file system change step, don't
11455        rollback on failure.
11456     
11457     Examining every case where resize_move_partition() is called and whether
11458     rollback on failure is wanted or not:
11459     
11460     * In resize_move()
11461         Resize / move extended partition.  No associated file system change.
11462       NO ROLLBACK
11463         Just to keep possibly applied operation.
11464     
11465     * #1 in move()
11466         Making all encompassing partition before moving file system.
11467       ROLLBACK
11468         To restore partition boundaries back to those of the file system.
11469     
11470     * #2 in move()
11471         Recreating original partition boundaries after file system move
11472         failed or was cancelled and has been rolled back.
11473       NO ROLLBACK
11474         To keep updated partition boundaries to match restored file system
11475         data.
11476     
11477     * #3 in move()
11478         Replacing all encompassing partition with final partition after
11479         successful file system move.
11480       NO ROLLBACK
11481         Keep new partition boundaries to match moved file system.
11482     
11483     * #1 in resize_encryption()
11484         Making the partition larger before growing closed LUKS encrypted
11485         data.
11486       ROLLBACK
11487         Restore partition boundaries back to those of the closed LUKS
11488         encrypted data.
11489     
11490     * #2 in resize_encryption()
11491         Shrinking the partition after open LUKS mapping has been shrunk, but
11492         before swap is re-created (smaller).
11493       NO ROLLBACK
11494         Difficult case because the partition shrink is in the middle of a
11495         LUKS shrink and a swap shrink (re-create).  If swap was actually
11496         shrunk like other types of file system, rather than re-created, then
11497         the operation sequence would be (1) shrink swap, (2) shrink LUKS
11498         encryption, (3) shrink partition.  In this hypothetical case and the
11499         actual case no rollback is preferred to try to keep the new
11500         partition boundaries match the shrunk open LUKS encryption mapping.
11501     
11502     * #3 in resize_encryption()
11503         Grow the partition before growing open LUKS mapping and re-creating
11504         swap larger.
11505       ROLLBACK
11506         Restore partition boundaries back to those of the smaller open LUKS
11507         encryption mapping.
11508     
11509     * #4 in resize_encryption()
11510         Shrink the partition after shrinking the file system and open LUKS
11511         encryption mapping.
11512       NO ROLLBACK
11513         Keep new smaller partition boundaries to match shrunk encrypted file
11514         system.
11515     
11516     * #5 in resize_encryption()
11517         Grow the partition before growing the open LUKS encryption mapping
11518         and file system.
11519       ROLLBACK
11520         Restore partition boundaries back to those of the not yet grown
11521         encrypted file system.
11522     
11523     * #1 in resize_plain()
11524         Resize partition before re-creating swap a different size.
11525       ROLLBACK
11526         Restore partition boundaries back to those of the not yet resized
11527         (re-created) swap space.
11528     
11529     * #2 in resize_plain()
11530         Shrink partition after shrinking the file system.
11531       NO ROLLBACK
11532         Keep new smaller partition boundaries to match shrunk file system.
11533     
11534     * #3 in resize_plain()
11535         Grow partition before growing the file system.
11536       ROLLBACK
11537         Restore partition boundaries back to those of the not yet grown
11538         file system.
11539     
11540     Removes the default value from the rollback_on_fail parameter so
11541     rollback or not has to be explicitly specified for every call of
11542     resize_move_partition().
11543     
11544     Bug 791875 - Rollback specific failed partition change steps
11545 
11546 2017-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
11547 
11548     Implement rollback of failed partition resize/move steps (#791875)
11549     
11550     Even after implementing a fix for bug 790418 "Unable to inform the
11551     kernel of the change message may lead to corrupted partition table"
11552     GParted/libparted can still encounter errors informing the kernel of the
11553     new partition layout.  This has been seen with GParted on CentOS 7 with
11554     libparted 3.1.
11555     
11556     In such a case the partition has been successfully written to the disk
11557     but just informing the kernel failed.  This is a problem because when a
11558     partition is being moved in advance of a file system move step, failure
11559     to inform the kernel leaves the partition boundaries not matching the on
11560     disk limits of the file system.  For a move to the left this leaves the
11561     partition reported as unknown, apparently losing the user's data.
11562     
11563     For example start with a 512 MiB partition containing an XFS file
11564     system.  This is recognised by blkid and parted, hence also by GParted.
11565     
11566         # blkid /dev/sdb1
11567         /dev/sdb1: UUID=... TYPE="xfs" PARTUUID="37965980-01"
11568         # parted /dev/sdb unit s print
11569         Model: ATA VBOX HARDDISK (scsi)
11570         Disk /dev/sdb: 16777216s
11571         Sector size (logical/physical): 512B/512B
11572         Partition Table: msdos
11573         Disk Flags:
11574     
11575         Number  Start     End       Size      Type     File system  Flags
11576          1      1048576s  2097151s  1048576s  primary  xfs
11577     
11578     Now move the partition 100 MiB to the left and have it fail to inform
11579     the kernel after the first partition change step.  Operation details:
11580     
11581         Move /dev/sdb1 to the left                                 (ERROR)
11582         * calibrate /dev/sdb1                                      (SUCCESS)
11583         * check file system on /dev/sdb1 for errors and (if poss...(SUCCESS)
11584         * grow partition from 512.00 MiB to 612.00 MiB             (ERROR)
11585             old start: 1048576
11586             old end: 2097151
11587             old size: 1048576 (512.00 MiB)
11588             requested start: 843776
11589             requested end: 2097151
11590             requested size: 1253376 (612.00 MiB)
11591           * libparted messages                                     (ERROR)
11592               Error informing the kernel about modifications to partition
11593               /dev/sdb1 -- Device or resource busy.  This means Linux won't
11594               know about any changes you made to /dev/sdb1 until you reboot
11595               -- so you shouldn't mount it or use it in any way before
11596               rebooting.  Failed to add partition 1 (resource temporarily
11597               unavailable)
11598     
11599     Now because the start of the partition is 100 MiB before the start of
11600     the file system, the file system is no longer recognised, and apparently
11601     the user's data has been lost.
11602     
11603         # blkid /dev/sdb1
11604         /dev/sdb1: PARTUUID="37965980-01"
11605         # parted /dev/sdb unit s print
11606         ...
11607         Number  Start    End       Size      Type     File system  Flags
11608          1      843776s  2097151s  1253376s  primary
11609     
11610     It doesn't matter why updating the partition failed, even if it was
11611     because of an error writing to the disk.  Rollback of the change to the
11612     partition should be attempted.  The worst case scenario is that rollback
11613     of the change fails, which is the equivalent to how the code worked
11614     before this patch set.
11615     
11616     However in other cases where the partition boundaries are being updated
11617     after a file system move or shrink step then the partition should be
11618     updated to match the new location of the file system itself.  And no
11619     rollback is wanted.  If the failure was only informing the kernel then
11620     in fact the partition has actually been updated on disk after all.
11621     
11622     So each partition resize/move step needs examining on a case by case
11623     basis to decide if rolling back the change to the partition is wanted or
11624     not.
11625     
11626     This patch only adds partition change rollback into
11627     resize_move_partition().  Rollback remains disabled until all cases are
11628     examined in the following patch.
11629     
11630     Bug 791875 - Rollback specific failed partition change steps
11631 
11632 2017-12-28  Mike Fleetwood <mike.fleetwood@googlemail.com>
11633 
11634     Extract common code into update_dmraid_entry() (#791875)
11635     
11636     Extract common code which updates a DMRaid device mapper entry into a
11637     sub-function.  This will also be needed when adding rollback of a
11638     partition change on failure.
11639     
11640     Bug 791875 - Rollback specific failed partition change steps
11641 
11642 2017-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
11643 
11644     Extract code into resize_move_partition_implement() (#791875)
11645     
11646     Extract the code which actually implements the partition change into a
11647     sub-function ready for adding rollback of the change on failure.
11648     
11649     Bug 791875 - Rollback specific failed partition change steps
11650 
11651 2017-12-27  Christian Kirbach <Christian.Kirbach@gmail.com>
11652 
11653     Update German translation
11654 
11655 2017-12-20  Daniel Mustieles <daniel.mustieles@gmail.com>
11656 
11657     Updated Spanish translation
11658 
11659 2017-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>
11660 
11661     Match up OperationDetail creation and status setting for internal copy (#790842)
11662     
11663     This is not required, but it is more logical to have an OperationDetail
11664     object created and it's final status set in the same function rather
11665     than split between caller and callee.  So move creation of
11666     "copy %1 using a block size of %2" OperationDetail objects into