1. 22 Sep, 2022 1 commit
  2. 20 Sep, 2022 1 commit
  3. 17 Sep, 2022 1 commit
  4. 14 Sep, 2022 1 commit
  5. 13 Sep, 2022 2 commits
    • Luna Jernberg's avatar
      Update Swedish translation · 0819e7d0
      Luna Jernberg authored and Administrator's avatar Administrator committed
      0819e7d0
    • Mike Fleetwood's avatar
      Update AC_PROG_LIBTOOL to LT_INIT in configure.ac (!106) · 5e2927f1
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Autoconf 2.71 on Fedora 36 and Ubuntu 22.04 LTS has started reporting
      a number of warnings about configure.ac containing obsolete macros.  One
      of them is this:
          $ ./autogen.sh
          ...
          Processing ./configure.ac
          configure.ac:17: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
          configure.ac:17: You should run autoupdate.
          m4/libtool.m4:99: AC_PROG_LIBTOOL is expanded from...
          configure.ac:17: the top level
          ...
      
      AC_PROG_LIBTOOL is deprecated and the replacement is LT_INIT [1].
      LT_INIT is available in all supported distributions, for example RHEL /
      CentOS 7 has libtool 2.4.2 with LT_INIT defined in
      /usr/share/aclocal/libtool.m4 serial 57.  The last known distribution
      without LT_INIT was RHEL / CentOS 5 [2].
      
      Update accordingly.
      
      [1] Libtool Manual, 5.4.1 The LT_INIT macro
          https://www.gnu.org/software/libtool/manual/html_node/LT_005fINIT.html
          "Macro: LT_INIT(options)
          ...  AC_PROG_LIBTOOL and AM_PROG_LIBTOOL are deprec...
      5e2927f1
  6. 11 Sep, 2022 1 commit
  7. 08 Sep, 2022 1 commit
  8. 03 Sep, 2022 1 commit
  9. 29 Aug, 2022 1 commit
  10. 25 Aug, 2022 8 commits
    • Mike Fleetwood's avatar
      Use apt to install packages on Debian and related distros · 845b5341
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Apt is the modern recommended command to use when installing packages
      these days on Debian and related distributions [1][2][3].  Convert the
      Ubuntu GitLab CI jobs and update the README accordingly.
      
      [1] What is the difference between apt and apt-get?
          https://askubuntu.com/questions/445384/what-is-the-difference-between-apt-and-apt-get
      [2] Difference Between apt and apt-get Explained
          https://itsfoss.com/apt-vs-apt-get-difference/
      [2] Apt and Apt-get - Which One to Use
          https://linoxide.com/apt-and-apt-get-which-one-to-use/
      845b5341
    • Mike Fleetwood's avatar
      Automate exclusion of loop device tests from CI image (!105) · 567bf018
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Avoid having to manually maintain the list of excluded File System tests
      in the GitLab Docker CI image.  Scan the unit test source extracting
      those tests marked with SKIP_IF_NOT_ROOT_FOR_REQUIRED_LOOPDEV_FOR_FS()
      to automatically construct the setting for the GTEST_FILTER environment
      variable.
      
      Closes !105 - Update used btrfs file system commands, new minimum is
                    btrfs-progs 4.5
      567bf018
    • Mike Fleetwood's avatar
      Allow execution of more btrfs CI unit tests (!105) · f6b253a2
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Now that reading btrfs usage, UUID and label can be performed on a file
      system image remove the need for a loop device for the relevant unit
      tests.
      
      Closes !105 - Update used btrfs file system commands, new minimum is
                    btrfs-progs 4.5
      f6b253a2
    • Mike Fleetwood's avatar
      Use btrfs inspect-internal dump-super to read usage (!105) · 13c08808
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      GParted has been using 'btrfs filesystem show' to report file system
      usage but that doesn't work on a file system image so doesn't work in a
      GitLab CI test job, as discussed earlier in this patchset.
      
      There is 'btrfs inspect-internal min-dev-size' but:
      1. That only works on a mounted file system and GParted isn't going to
         mount an unmounted file system just to query it's used space, so by
         extension won't work on image files.
      2. It reports a figure which is almost the same as the chunk usage of
         the device within the btrfs file system.  However if some files have
         been deleted leaving chunks partially used, then 'btrfs filesystem
         resize' will successfully shrink a btrfs smaller than the reported
         minimum device size.
      
      And there is also 'btrfs filesystem usage' but that also only works on a
      mounted file system.
      
      So instead use 'btrfs inspect-internal dump-super' to report some of the
      figures previously obtained from 'btrfs filesystem ...
      13c08808
    • Mike Fleetwood's avatar
      Use btrfs filesystem show --raw to read usage (!105) · db5df60f
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      'btrfs filesystem show' only used to report rounded human readable size
      figures.  Therefore the actual figure could have been anywhere within
      the rounding limit.  GParted also applied a heuristic to snap the file
      system size figure to the partition size if the partition size was
      within the rounding limit of the reported file system size [1].
      
      btrfs-progs v4.1 added the --raw option to print the figures in bytes
      [2][3][4].
          # btrfs filesystem show --raw /dev/sdb1
          Label: none  uuid: 003a619e-856f-4b9c-bd29-4d0ae0296d66
                  Total devices 2 FS bytes used 178765824
                  devid    1 size 2147483648 used 239861760 path /dev/sdb1
                  devid    2 size 2147483648 used 436207616 path /dev/sdc1
      
      Since the oldest supported distributions now use btrfs-progs v4.5.3 and
      later (see the distribution End-of-Life table in the previous commit
      message), unconditionally use this to get accurate figures.
      
      [1] 7fc16a1b...
      db5df60f
    • Mike Fleetwood's avatar
      Use btrfs inspect-internal dump-super to read UUID (!105) · be895fb9
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      GParted so far uses 'btrfs filesystem show' to read the file system
      UUID.  But this doesn't work on a file system image so doesn't work in
      the GitLab CI test jobs, as discussed in the earlier commit "Use btrfs
      filesystem label to read the FS label (!105)".
          $ truncate -s 256M /tmp/test.img
          $ mkfs.btrfs /tmp/test.img
          ...
          UUID:               5ea62f88-fef3-4ece-a726-b88f3d81fe1c
          ...
          $ btrfs filesystem show /tmp/test.img
          ERROR: not a valid btrfs filesystem: /tmp/test.img
      
      Instead use 'btrfs inspect-internal dump-super' which works on image
      files too.
          $ btrfs inspect-internal dump-super /tmp/test.img
          ...
          fsid                    5ea62f88-fef3-4ece-a726-b88f3d81fe1c
          ...
      
      'btrfs inspect-internal dump-super' was added in btrfs-progs 4.5 [1][2]
      so is available in the oldest supported distributions and can be used
      unconditionally.
          Distro            EOL        btrfs --version
          Debian 10         2022-Jun   v4.20
          RHEL / CentOS 7   2024-Jun   v4.9.1
          Ubuntu 18.04 LTS  2023-Apr   v4.15.1
          SLES 12 SP5       2024-Oct   v4.5.3    [3][4]
      
      Unfortunately it returns 0 status on failure so use non-empty stderr to
      identify failure.
          $ rm /tmp/test.img
          $ truncate -s 256M /tmp/test.img
          $ btrfs inspect-internal dump-super /tmp/test.img 1> /dev/null
          ERROR: bad magic on superblock on /tmp/test.img at 65536
          $ echo $?
          0
      
      [1] btrfs-progs: introduce inspect-internal dump-super
          https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=eaa93e3b0295fc94c774ec73056559a6b8c78b42
      [2] Btrfs progs release 4.5
          https://lore.kernel.org/linux-btrfs/20160320235330.GG21722@suse.cz/
          "* new/moved commands
             * btrfs-show-super -> btrfs inspect-internal dump-super
          "
      [3] SUSE Long Term Service Pack Support
          https://links.imagerelay.com/cdn/3404/ql/f3a083e9bcd34c76addd096d7f60ec00/long_term_service_pack_support_flyer.pdf
      [4] SUSE package search
          https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=12.5&arch=x86_64&query=btrfsprogs&module=
      
      Closes !105 - Update used btrfs file system commands, new minimum is
                    btrfs-progs 4.5
      be895fb9
    • Mike Fleetwood's avatar
      Extract repeated code into trim_trailing_new_line() (!105) · 1fbc8988
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Create function to replace repeated code which optionally removes
      trailing new line character from a string.
      
      Closes !105 - Update used btrfs file system commands, new minimum is
                    btrfs-progs 4.5
      1fbc8988
    • Mike Fleetwood's avatar
      Use btrfs filesystem label to read the FS label (!105) · ee823b0b
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Until now GParted has run 'btrfs filesystem show' to read the file
      system label.  This has a number of issues and limitations:
      1.  Doesn't work on a file system image so can't be unit tested in the
          GitLab CI test job where a loop device can't be created [1] or as a
          non-root user.
      2.  Reported failed exit status 1 when successfully showing a mounted
          btrfs, but only when using btrfs-progs v3.14 and 3.14.1 [2][3].
      3.  Failed to distinguish between label set to "none" and no label
          reported as none, but only when mounted and with btrfs-progs v3.12
          [3].
      
      As non-root user run btrfs read label unit test:
          $ tests/test_SupportedFileSystems --gtest_filter='*CreateAndReadLabel/btrfs'
          ...
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs
          test_SupportedFileSystem.cc:539: Skip test.  Not root to be able to create required loop device
          [       OK ] My/SupportedFileSystemsTest.CreateAndReadLabel/btrfs (0 ms)
      
      Even as root, 'btrfs filesystem show' fails to work on an image file:
          # truncate -s 256M /tmp/test.img
          # mkfs.btrfs /tmp/test.img
          # btrfs filesystem show /tmp/test.img
          ERROR: not a valid btrfs filesystem: /tmp/test.img
          # echo $?
          1
          # rm /tmp/test.img
      
      Instead use 'btrfs filesystem label' to read the label.  It also works
      on an image file, the exit status is informative and output is just the
      label followed by a new line character [4] so very simple to parse.
      
      Error case:
          $ truncate -s 256M /tmp/test.img
          $ btrfs filesystem label /tmp/test.img
          No valid Btrfs found on /tmp/test.img
          $ echo $?
          255
      
      No label case:
          $ mkfs.btrfs /tmp/test.img
          $ btrfs filesystem label /tmp/test.img
      
          $ echo $?
          0
          $ btrfs filesystem label /tmp/test.img | hexdump -C
          00000000  0a                                                |.|
          00000001
      
      Label case:
          $ mkfs.btrfs -L 'label with
          > new line and trailing space ' /tmp/test.img
          $ btrfs filesystem label /tmp/test.img
          label with
          new line and trailing space
          $ echo $?
          0
          $ btrfs filesystem label /tmp/test.img | hexdump -C
          00000000  6c 61 62 65 6c 20 77 69  74 68 0a 6e 65 77 20 6c  |label with.new l|
          00000010  69 6e 65 20 61 6e 64 20  74 72 61 69 6c 69 6e 67  |ine and trailing|
          00000020  20 73 70 61 63 65 20 0a                           | space .|
          00000028
      
      Run 'btrfs filesystem label' always passing the block device as this
      works for both mounted and unmounted file systems.  This is in
      contrast to writing the label for a mounted btrfs where the mount
      mount must be used [5].
          # mkfs.btrfs -L 'test label' /dev/sdb1
          # btrfs filesystem label /dev/sdb1
          test label
          # mount /dev/sdb1 /mnt/1
          # btrfs filesystem label /dev/sdb1
          test label
      
      [1] 07ad43a1
          Create loop devices for BTRFS read file system interface tests (!49)
      [2] 82c6265f
          Update parsing of btrfs filesystem show for the UUID (#733601)
      [3] eca732fb
          Update parsing of btrfs filesystem show for the label (#733601)
      [4] btrfs-progs v3.14, cmd_label() function
          https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/tree/cmds-filesystem.c?h=v3.14#n984
      [5] eb034b17
          Add labelling of mounted btrfs (#163)
      
      Closes !105 - Update used btrfs file system commands, new minimum is
                    btrfs-progs 4.5
      ee823b0b
  11. 13 Aug, 2022 1 commit
  12. 04 Jul, 2022 16 commits
    • Mike Fleetwood's avatar
      Fix typo in comment in xfs::write_label() · bf5c6bb6
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      bf5c6bb6
    • Mike Fleetwood's avatar
      Add unit testing of GParted exFAT interface to ubuntu_test CI job · bfea6562
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Now that the docker image for ubuntu:latest has updated to Ubuntu 22.04
      LTS [1] and exfatprogs is available [2] add the package to the CI job to
      include it in the testing.
      
      [1] Ubuntu Docker official image
          https://hub.docker.com/_/ubuntu/
          "Supported tags and respective Dockerfile links
          ...
          22.04, ..., latest, ...
          "
      [2] Ubuntu > Packages > jammy (22.04LTS) > otherosfs > exfatprogs
          https://packages.ubuntu.com/jammy/exfatprogs
      [3] 3783cb41
          Add unit testing of GParted exFAT interface (!30)
      bfea6562
    • Mike Fleetwood's avatar
      Add clearing FS label to CreateAndWriteLabel unit test · a46c0cbe
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      For FAT16/32 and XFS file systems clearing the label uses different
      command options and code path in file system specific ::write_label()
      method.  Therefore extend this unit test to also test clearing the
      label.
      a46c0cbe
    • Mike Fleetwood's avatar
      Stop clearing FAT16/32 label when setting a new UUID (!104) · b7ef1688
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Now fix the error with GParted clearing the label when setting a new
      UUID on a FAT16/32 file system.  Reproduce the issue on the command
      line:
          # mkfs.fat -F 16 -v -I -n TEST_LABEL /dev/sdb1
          # mdir -f -i /dev/sdb1 ::/
           Volume in drive : is TEST_LABEL
           Volume Serial Number is 5D4C-6E6E
          ...
          # mlabel -n -i /dev/sdb1 ::
          # mdir -f -i /dev/sdb1 ::/
           Volume in drive : has no label
           Volume Serial Number is 77BB-A883
          ...
      
      This was broken by commit "Fix writing FAT16/32 FS UUID on Alpine Linux
      (!104)" earlier in this patchset, which included this comment:
          "...  Also drop the '-s' option
          as showing the current label is unrelated to writing a new UUID."
      
      It is not mentioned in the mlabel[1] manual page that option -s is
      needed in order to avoid clearing the label when assigning a new UUID.
      Anyway add the option back.
      
      [1] mlabel(1)
          https://linux.die.net/man/1/mlabel
          "s     Shows the existing label, without prompting the user.
          n      Assigns a new (random) serial number to the disk
          "
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      b7ef1688
    • Mike Fleetwood's avatar
      Add CreateAndWriteUUIDAndReadLabel unit test (!104) · fde76a94
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      During review and testing of this patchset it was discovered that using
      GParted to set a new UUID on a FAT16 or FAT32 file system that there was
      a new unwanted side effect of clearing the label.
      
      Add unit test to cover this error scenario.  It does the following:
      1. Creates a file system with a known label;
      2. Writes a new UUID;
      3. Reads the label and confirms it matches the initial label.
      
      This new unit test captures the fault like this:
          $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteUUIDAndReadLabel*'
          ...
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat16
          test_SupportedFileSystems.cc:645: Failure
          Expected equality of these values:
            fs_label
              Which is: "TEST_LABEL"
            m_partition.get_filesystem_label().c_str()
              Which is: ""
          [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat16, where GetParam() = 13 (21 ms)
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat32
          test_SupportedFileSystems.cc:645: Failure
          Expected equality of these values:
            fs_label
              Which is: "TEST_LABEL"
            m_partition.get_filesystem_label().c_str()
              Which is: ""
          [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUIDAndReadLabel/fat32, where GetParam() = 14 (22 ms)
      
      Don't forget to exclude this unit test for file systems which need a
      loop device but which fails to be created inside the docker CI image.
      Reference:
          39fdfe51
          Exclude unit tests needing losetup in Docker CI image (!59)
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      fde76a94
    • Mike Fleetwood's avatar
      Fix make distcheck in Alpine Linux CI test job (!104) · b7f951bc
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      The make distcheck step of the CI test job fails like this on Alpine
      Linux:
          $ make distcheck
          ...
          make[1]: Leaving directory '/home/alpine/programming/c/gparted'
          if test -d "gparted-1.4.0-git"; then find "gparted-1.4.0-git" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "gparted-1.4.0-git" || { sleep 5 && rm -rf "gparted-1.4.0-git"; }; else :; fi
          case 'gparted-1.4.0-git.tar.gz' in \
          *.tar.gz*) \
            eval GZIP= gzip --best -dc gparted-1.4.0-git.tar.gz | ${TAR-tar} xf - ;;\
          *.tar.bz2*) \
            bzip2 -dc gparted-1.4.0-git.tar.bz2 | ${TAR-tar} xf - ;;\
          *.tar.lz*) \
            lzip -dc gparted-1.4.0-git.tar.lz | ${TAR-tar} xf - ;;\
          *.tar.xz*) \
            xz -dc gparted-1.4.0-git.tar.xz | ${TAR-tar} xf - ;;\
          *.tar.Z*) \
            uncompress -c gparted-1.4.0-git.tar.Z | ${TAR-tar} xf - ;;\
          *.shar.gz*) \
            eval GZIP= gzip --best -dc gparted-1.4.0-git.shar.gz | unshar ;;\
          *.zip*) \
            unzip gparted-1.4.0-git.zip ;;\
          *.tar.zst*) \
            zstd -dc gparted-1.4.0-git.tar.zst | ${TAR-tar} xf - ;;\
          esac
          gzip: unrecognized option: best
          BusyBox v1.35.0 (2022-05-09 17:27:12 UTC) multi-call binary.
      
          Usage: gzip [-cfkdt123456789] [FILE]...
      
          Compress FILEs (or stdin)
      
                  -1..9   Compression level
                  -d      Decompress
                  -c      Write to stdout
                  -f      Force
                  -k      Keep input files
                  -t      Test integrity
          tar: short read
          make: *** [Makefile:844: distcheck] Error 1
      
      Busybox gzip is erroring because it doesn't make sense to request best
      compression when decompressing to stdout in this command:
          eval GZIP= gzip --best -dc gparted-1.4.0-git.tar.gz | ${TAR-tar} xf -
      
      Fix by installing the GNU gzip package into Alpine Linux test CI job docker
      image.
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      b7f951bc
    • Mike Fleetwood's avatar
      Fix writing FAT16/32 FS UUID on Alpine Linux (!104) · 7368f55a
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Unit test writing FAT16/32 file system UUIDs fails on Alpine Linux like
      this:
          $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteUUID/fat16'
          ...
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteUUID/fat16
          test_SupportedFileSystems.cc:616: Failure
          Value of: m_fs_object->write_uuid(m_partition, m_operation_detail)
            Actual: false
          Expected: true
          Operation details:
          mkfs.fat -F16 -v -I '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (SUCCESS)
          ...
          mlabel -s -n :: -i '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
      
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
      
          [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteUUID/fat16, where GetParam() = 13 (38 ms)
      
      Using GParted on Alpine Linux to perform the same action produces the
      same error in the operation results.  Reproduce this on the command
      line:
          # mkfs.fat -F 16 -v -I /dev/sdb1
          # mlabel -s -n :: -i /dev/sdb1
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
          # echo $?
          1
      
      Again fix the same way, by moving the non-option '::' drive
      specification to the end of the command line.  Also drop the '-s' option
      as showing the current label is unrelated to writing a new UUID.
          # mdir -f -i /dev/sdb1 ::/ | grep 'Volume Serial Number is'
           Volume Serial Number is B97E-59A3
          # mlabel -n -i /dev/sdb1 ::
          # echo $?
          0
          # mdir -f -i /dev/sdb1 ::/ | grep 'Volume Serial Number is'
           Volume Serial Number is 1552-96A6
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      7368f55a
    • Mike Fleetwood's avatar
      Fix reading FAT16/32 FS UUID on Alpine Linux (!104) · 7d8870d8
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Unit test reading FAT16/32 file system UUIDs fails on Alpine Linux like
      this:
          $ ./test_SupportedFileSystems --gtest_filter='*CreateAndReadUUID/fat16'
          ....
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16
          test_SupportedFileSystems.cc:581: Failure
          Expected: (m_partition.uuid.size()) >= (9U), actual: 0 vs 9
          test_SupportedFileSystems.cc:584: Failure
          Value of: m_partition.get_messages().empty()
            Actual: false
          Expected: true
          Partition messages:
          Drive '::' not supported
          Cannot initialize '::'
          Drive 'A:' not supported
          Cannot initialize 'A:'
          Drive 'A:' not supported
          Cannot initialize 'A:'
      
          [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadUUID/fat16, where GetParam() = 13 (28 ms)
      
      This doesn't normally affect GParted because it uses blkid as first
      choice to read file system UUIDs, only using file system specific
      commands when blkid isn't available.  Reproduce this on the command
      line:
          # mkfs.fat -F 16 -v -I /dev/sdb1
          # mdir -f :: -i /dev/sdb1
          Drive '::' not supported
          Cannot initialize '::'
          Drive 'A:' not supported
          Cannot initialize 'A:'
          Drive 'A:' not supported
          Cannot initialize 'A:'
      
      Again, this is caused by having non-option '::' drive specification
      before all the options on the mdir command line, which isn't supported
      by the POSIX strict getopt(3) on Alpine Linux.  Apply the same fix of
      moving the non-option argument to the end.
          # mdir -f -i /dev/sdb1 ::/
           Volume is drive : has no label
           Volume Serial Number is 7DC9-BCD9
          Director for ::/
      
          No files
          # echo $?
          0
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      7d8870d8
    • Mike Fleetwood's avatar
      Refactor fat16::read_uuid() into if fail return early pattern (!104) · ff177038
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      ff177038
    • Mike Fleetwood's avatar
      Fix writing FAT16/32 FS labels on Alpine Linux (!104) · 54dbc87b
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Unit test writing FAT16/32 file system labels fails on Alpine Linux like
      this:
          $ ./test_SupportedFileSystems --gtest_filter='*CreateAndWriteLabel/fat16'
          ...
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndWriteLabel/fat16
          test_SupportedFileSystems.cc:601: Failure
          Value of: m_fs_object->write_label(m_partition, m_operation_detail)
            Actual: false
          Expected: true
          Operation details:
          mkfs.fat -F16 -v -I -n 'FIRST      ' '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (SUCCESS)
          ...
          mlabel ::'SECOND     ' -i '/home/alpine/programming/c/gparted/tests/test_SupportedFileSystems.img'    00:00:00  (ERROR)
      
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
      
          [  FAILED  ] My/SupportedFileSystemsTest.CreateAndWriteLabel/fat16, where GetParam() = 13 (29 ms)
      
      Using GParted on Alpine Linux to perform the same action produces the
      same error in the operation results.  Reproduce this on the command
      line:
          # mkfs.fat -F 16 -v -I -n FIRST /dev/sdb1
          # mlabel ::SECOND -i /dev/sdb1
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
          # echo $?
          1
      
      Again, this is because musl libc's getopt(3) is POSIX compliant and
      stops parsing options at '::', the first non-option argument.  Apply the
      same fix of moving the non-option argument to the end of the mlabel
      command line:
          # mlabel -i /dev/sdb1 ::SECOND
          # echo $?
          0
          # mlabel -s -i /dev/sdb1
           Volume label is SECOND
      
      And for the clearing label case:
          # mlabel -c -i /dev/sdb1 ::
          # echo $?
          0
          # mlabel -s -i /dev/sdb1
           Volume has no label
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      54dbc87b
    • Mike Fleetwood's avatar
      Fix reading FAT16/32 FS labels on Alpine Linux (!104) · a48b29ba
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Several of the FAT16/32 file system unit tests fail on Alpine Linux.  In
      this commit we are just looking at the failure to read the label.  The
      test fails like this:
          $ ./test_SupportedFileSystems --gtest_filter='*CreateAndReadLabel/fat16'
          ...
          [ RUN      ] My/SupportedFileSystemsTest.CreateAndReadLabel/fat16
          test_SupportedFileSystems.cc:551: Failure
          Expected equality of these values:
            fs_label
              Which is: "TEST_LABEL"
            m_partition.get_filesystem_label().c_str()
              Which is: ""
          test_SupportedFileSystems.cc:554: Failure
          Value of: m_partition.get_messages().empty()
            Actual: false
          Expected: true
          Partition messages:
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
      
          [  FAILED  ] My/SupportedFileSystemsTest.CreateAndReadLabel/fat16, where GetParam() = 13 (21 ms)
      
      The same error can be seen by using GParted to display a FAT16 or FAT32
      file system on Alpine Linux.  The Partition Information dialog displays
      this warning:
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
      
      Reproduce this on the command line:
          # mkfs.fat -F 16 -v -I -n TEST_LABEL /dev/sdb1
          # mlabel -s :: -i /dev/sdb1
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
          # echo $?
          1
      
      The mlabel.c source [1] uses getopt(3) to parse the command line
      arguments.  musl libc's [2] getopt(3) must be strictly POSIX compliant
      [3][4] and stops reading options at the first non-option argument, '::'
      in this case.  Move the non-option argument to the end of the command
      line and it works:
          # mlabel -s -i /dev/sdb1 ::
           Volume label is TEST_LABEL
      
      Where as GNU Libc's getopt(3) [5] says that by default it reorders argv
      eventually moving all non-option arguments to the end, hence why this
      has worked on every Linux distribution using GNU Libc.  This can be
      broken on any Linux distribution using GNU Libc by enforcing strict
      POSIX behaviour from getopt(3).  For example on Fedora 36:
          # mkfs.fat -F 16 -v -I -n TEST_LABEL /dev/sdb1
          # export POSIXLY_CORRECT=1
          # mlabel -s :: -i /dev/sdb1
          Mtools version 4.0.39, dated April 10th, 2022
          Usage: mlabel [-vscVn] [-N serial] drive:
          # echo $?
          1
          # mlabel -s -i /dev/sdb1 ::
          Hidden (2048) does not match sectors (63)
           Volume label is TEST_LABEL
          # echo $?
          0
      
      Fix by moving the non-option (image file drive specification) '::' to
      the end of the mlabel command line.
      
      [1] Mtools
          https://www.gnu.org/software/mtools/
      [2] musl libc
          https://musl.libc.org/
          "musl is an implementation of the C standard library built on top of
          the Linux system call API, including interfaces defined in the base
          language standard, POSIX, and widely agreed-upon extensions.
          "
      [3] POSIX.1-2017, Functions, getopt
          https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html
      [4] getopt(3p)
          https://man7.org/linux/man-pages/man3/getopt.3p.html
      [5] getopt(3)
          https://www.man7.org/linux/man-pages/man3/getopt.3.html
          "By default, getopt() permutes the contents of argv as it scans, so
          that eventually all the nonoptions are at the end.  Two other
          scanning modes are also implemented.  If the first character of
          optstring is '+' or the environment variable POSIXLY_CORRECT is set,
          then option processing stops as soon as a nonoption argument is
          encountered.
          "
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      a48b29ba
    • Mike Fleetwood's avatar
      Refactor fat16::read_label() into if fail return early pattern (!104) · 407e0ac6
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Follows the "Return Early" design pattern making the code easier to
      understand without having to remember cases for elses or cascading ifs.
      Refactor before the following commit's fix so that capture of output on
      failure can be confirmed as still working.
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      407e0ac6
    • Mike Fleetwood's avatar
      Avoid using += shell variable concatenation in CI test jobs (!104) · 1424b7a5
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      The test CI job on Alpine Linux fails like this:
          $ GTEST_FILTER+=':My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs'
          /bin/sh: eval: line 135: GTEST_FILTER+=:My/SupportedFileSystemsTest.CreateAndReadUsage/btrfs: not found
      
      This is because the busybox ash shell in Alpine Linux doesn't support +=
      syntax for variable concatenation.  Use plain variable assignment
      instead.
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      1424b7a5
    • Mike Fleetwood's avatar
      Add Alpine Linux CI test job (!104) · 50388033
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      50388033
    • Mike Fleetwood's avatar
      Add Alpine Linux CI build job (!104) · 7e1fef16
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      There have been a number of GParted build issues [1][2] recently on
      Alpine Linux because it uses musl libc [3] which is stricter to POSIX,
      rather than the GNU C Library (glibc) which has numerous enhancements.
      Glibc is used by most Linux distributions, including CentOS and Ubuntu
      already used in the GNOME Continuous Integration jobs.  So add a GParted
      build job on Alpine Linux to catch these issues in future.  Uses the
      docker image of the latest Alpine Linux release.
      
      [1] 3d4b1c1e
          Fix NULL == 0 assumption in call to ped_partition_flag_next() (!100)
      [2] 45c00927
          Use POSIX basename() in BCache_Info.cc (!99)
      [3] musl libc
          https://musl.libc.org/
      
      Closes !104 - Add Alpine Linux CI jobs and resolve label and UUID issues
                    with FAT16/32
      7e1fef16
    • Mike Fleetwood's avatar
      Print kernel and OS details first in the GitLab CI jobs · 2ff4a420
      Mike Fleetwood authored and Curtis Gedak's avatar Curtis Gedak committed
      When the CentOS 7 CI jobs were failing on a subset of the job runners
      [1] during March to May 2022, the docker image would hang even before
      the packages were fully installed so cat /proc/version and cat
      /etc/os-release were never run.  Move them to the first thing done in
      the docker image.
      
      [1] Hanging of GitLab CI jobs on a subset of job runners
          https://discourse.gnome.org/t/hanging-of-gitlab-ci-jobs-on-a-subset-of-job-runners/9931
      2ff4a420
  13. 27 Jun, 2022 1 commit
  14. 24 Jun, 2022 2 commits
  15. 23 Jun, 2022 1 commit
  16. 13 Jun, 2022 1 commit