GNOME Disks: Resize and Repair Filesystems

Short Description

Disks has only seen minor development recently and needs support for resizing and fixing filesystems in order to fully replace GParted which runs only as root and not under Wayland. A good part, but not all, for this is already covered in libblockdev which UDisks started to link to, and support for it has to be worked out as D-Bus API (other projects using UDisks might also benefit). The UI for these features in Disks should enable unexperienced users to safely accomplish their task.

About me

My name is Kai Lüke, I'm a greenhorn GNOME Disks contributor and study in the computer science master's program at TU Berlin. Recently I became the maintainer for GNOME Disks.

Mentoring

My mentor is Ondrej Holy who is working on e.g. GVfs and System Settings. From the UDisks team Vratislav Podzimek does support.

Project Progress

One can see the development outcome in the commit logs of Disks, UDisks and libblockdev. Discussions take place on GNOME bugzilla, IRC and GitHub.

My blog contains GSoC posts with updates and the repair and resize functionality is available in GNOME Disks 3.26 together with UDisks > 2.7.2 (currently best would be booting Fedora Rawhide).

Project Result as of Aug 21th

Schedule

during May

Close obsolete bugs and fix bugs, prototyping with UDisks to decide on API semantics which suite the problem, plan detailed code architecture, create wiki website Apps/Disks, draw UI mockups. Fixed issues are Auto-clear tooltip, Show UUID, Fix Format Dialog, Remove deprecated GTK calls, Indicate max label length and same password, Disable auto-clear before unmount, fix unmounting and insensitive auto-clear switch, Clarify meaning of encryption/mounting options, Prompt to stop jobs, Update Window for Power changes

May 30 – June 13

implement tooling awareness (expose which actions for which filesystems are supported in UDisks) and stub D-Bus API. Deliver: GNOME Disks lists only supported actions for filesystem creation – This is now part of the redesigned format dialog. UDisks API and libblockdev functions

June 14 – June 27

implement repair and resize by using libblockdev in UDisks. Deliver: code (and tests via D-Bus on loop devices) for the libblockdev partition resize (specify tolerance and wait for partition) and fix XFS resize functions, new UDisks API for Partition resize and FS resize/check/repair (fix partition authorization)

June 28 – July 11

implement UI prototype for repair. Deliver: Disks should repair a filesystem with reasonable UX

July 12 – July 26

implement UI prototype for resize. Deliver: Disks should resize a filesystem

July 27 – August 9

testing, documentation, UI and code polishing, care for internationalization, accessibility, real user feedback at GUADEC. Deliver: improve resize with reasonable UX, fix last UI issues, improve job displaying and make action buttons insensitive

August 10 – August 20

continue with tasks above, open bugs to track left over work. Deliver: working git branches (actually master) for Disks except the redesigned format dialog, libblockdev (master) and UDisks (master) except the PR pending to prevent a rare race condition. Overall the project is complete with that and the final state is reached (left over is to parse and retrieve job progress in libblockdev).

stretch tasks?

(unfortunately the time was not enough to get to this point) overview of supported/installable filesystems actions in Disks with PackageKit invocation, implement ideas from existing UI designs for the partition list, partition moving, missing filesystems (NTFS support could be added to libblockdev), …

Retrospective

I'm happy that the tasks of the schedule could be completed and the project scope was reached in a simple form. Some things were unforeseen and so I could not get to the stretch tasks and will keep them for the next months. I learned a lot and found a place in the community as new maintainer. Still I hope to involve more in other areas well.

The first steps in the beginning were lucky because I got good and quick responses in my attempts to contribute something to a part of GNOME lacking a designated maintainer. My first big patch was to allow GNOME Disks to create empty (sparse) disk image files through a new dialog in the app menu. I also felt encouraged in my ideas about proposing a GSoC project and people helped a lot to find a mentor.

From thereone I was in excellent hands and got detailed guidance about developing best practices in GNOME. Some things were not clear to me at first because I thought about easy and unconventional solutions while quality assurance in GNOME has is own preferences. They may look a bit conservative but focus on having an obvious way how things are solved. This convention allows to be acquainted with foreign code quickly. It was a common task during the project to reorder code and rewrite the patches.

Also the relation with the UDisks team with my API proposals was welcoming and allowed me to dive into three different code bases during my project; of an UI, a system service and a library. I got to know about their workflow in a team with continuous integration. Some problems with low-level partition table manipulation were unexpected and caused some instability and development delay. Also one API decision was not the best. The choice to base all features on libblockev which was – just by chance! – also merged as backend to UDisks master during my project allowed to get quick results. But also it meant that progress indication is still outstanding because it would need to introduce a second set of API functions there (So that's left-over work).

The upcoming design discussions about the format dialog were very long and delayed inclusion of some side-features in master. Nevertheless I'm grateful about the GNOME design insights and my learning path in organizing a GLib/GTK code base. Attending GUADEC was a highlight not only because of the 20th birthday of GNOME but also because the main topics of design, good base technolgy and a good build toolchain were strongly present.

I thank my mentor OndrejHoly for his careful reviews and tips, all the help and engagement of MichaelCatanzaro (specially in the beginning), CarlosSoriano for pulling the persons together, EmmanueleBassi for pointing out build issues and Vratislav Podzimek as representative for the rest of the UDisks team without nothing would have been possible for this project on GNOME Disks!

Outreach/SummerOfCode/2017/Projects/KaiLueke_Disks (last edited 2017-08-27 13:18:15 by KaiLueke)