The work on the nautilus-gio branch continues:
[alex@localhost nautilus-gio]$ find -name "*.c" | xargs grep gnome_vfs_ | wc -l
531
Where it originally was:
[alex@localhost nautilus]$ find -name "*.[ch]" | xargs grep gnome_vfs_ | wc -l
803
So, 33% of all gnome vfs calls have been removed.
This doesn’t seem like a lot, but much of the core of nautilus has moved over.
These are the current uses of gnome vfs in nautilus-gio:
2 gnome_vfs_async_cancel
1 gnome_vfs_async_close
1 gnome_vfs_async_load_directory_uri
1 gnome_vfs_async_open
2 gnome_vfs_async_read
2 gnome_vfs_async_set_file_info
6 gnome_vfs_async_xfer
1 gnome_vfs_check_same_fs_uris
2 gnome_vfs_close
2 gnome_vfs_connect_to_server
1 gnome_vfs_directory_list_load
1 gnome_vfs_directory_visit_uri
2 gnome_vfs_drive_compare
3 gnome_vfs_drive_eject
2 gnome_vfs_drive_get_activation_uri
1 gnome_vfs_drive_get_device_path
8 gnome_vfs_drive_get_device_type
2 gnome_vfs_drive_get_display_name
1 gnome_vfs_drive_get_icon
2 gnome_vfs_drive_get_mounted_volumes
8 gnome_vfs_drive_is_mounted
1 gnome_vfs_drive_is_user_visible
5 gnome_vfs_drive_mount
3 gnome_vfs_drive_ref
3 gnome_vfs_drive_unmount
17 gnome_vfs_drive_unref
1 gnome_vfs_error_quark
5 gnome_vfs_escape_path_string
1 gnome_vfs_escape_slashes
6 gnome_vfs_escape_string
5 gnome_vfs_file_info_list_free
8 gnome_vfs_file_info_new
1 gnome_vfs_file_info_to_gio
9 gnome_vfs_file_info_unref
2 gnome_vfs_file_type_from_g_file_type
2 gnome_vfs_file_type_to_g_file_type
9 gnome_vfs_find_directory
5 gnome_vfs_get_file_info
1 gnome_vfs_get_uri_scheme
1 gnome_vfs_get_volume_free_space
18 gnome_vfs_get_volume_monitor
2 gnome_vfs_init
1 gnome_vfs_make_directory
1 gnome_vfs_make_directory_for_uri
5 gnome_vfs_make_uri_from_input
1 gnome_vfs_make_uri_from_input_with_trailing_ws
1 gnome_vfs_make_uri_from_shell_arg
1 gnome_vfs_method_get
2 gnome_vfs_monitor_add
2 gnome_vfs_monitor_cancel
1 gnome_vfs_open
1 gnome_vfs_read
1 gnome_vfs_result_to_error
7 gnome_vfs_result_to_string
5 gnome_vfs_shutdown
4 gnome_vfs_unescape_string
4 gnome_vfs_unescape_string_for_display
2 gnome_vfs_unlink
7 gnome_vfs_uri_append_file_name
3 gnome_vfs_uri_append_string
1 gnome_vfs_uri_dup
7 gnome_vfs_uri_equal
2 gnome_vfs_uri_exists
4 gnome_vfs_uri_extract_dirname
4 gnome_vfs_uri_extract_short_name
2 gnome_vfs_uri_extract_short_path_name
7 gnome_vfs_uri_get_host_name
1 gnome_vfs_uri_get_host_port
9 gnome_vfs_uri_get_parent
2 gnome_vfs_uri_get_path
2 gnome_vfs_uri_get_scheme
3 gnome_vfs_uri_get_user_name
3 gnome_vfs_uri_has_parent
1 gnome_vfs_uri_is_local
6 gnome_vfs_uri_is_parent
1 gnome_vfs_uri_list_extract_uris
8 gnome_vfs_uri_list_free
2 gnome_vfs_uri_make_full_from_relative
54 gnome_vfs_uri_new
4 gnome_vfs_uri_ref
12 gnome_vfs_uris_match
18 gnome_vfs_uri_to_string
68 gnome_vfs_uri_unref
1 gnome_vfs_url_show_with_env
4 gnome_vfs_volume_compare
4 gnome_vfs_volume_eject
12 gnome_vfs_volume_get_activation_uri
6 gnome_vfs_volume_get_device_type
7 gnome_vfs_volume_get_display_name
2 gnome_vfs_volume_get_drive
1 gnome_vfs_volume_get_filesystem_type
5 gnome_vfs_volume_get_icon
2 gnome_vfs_volume_get_volume_type
1 gnome_vfs_volume_handles_trash
1 gnome_vfs_volume_is_read_only
6 gnome_vfs_volume_is_user_visible
2 gnome_vfs_volume_monitor_get_connected_drives
1 gnome_vfs_volume_monitor_get_drive_by_id
7 gnome_vfs_volume_monitor_get_mounted_volumes
1 gnome_vfs_volume_monitor_get_volume_by_id
5 gnome_vfs_volume_monitor_get_volume_for_path
6 gnome_vfs_volume_ref
3 gnome_vfs_volume_unmount
29 gnome_vfs_volume_unref
1 gnome_vfs_xfer_uri
A lot of these are low hanging fruit. For instance, there are 163 calls to the gnome vfs volume monitoring API, which has more or less a direct translation to GIO. Another large part is uri handling which should be translatable to GFile manipulation with some work. So it should be possible to get these numbers a lot lower fast.
However, other parts, like gnome_vfs_xfer() needs significant work. It is only called once, but is a large part of nautilus functionallity, basically doing all sorts of file copies and moves.
So, we’re going places, but we’re far from there yet.
Nice work! 😀
That would be “33% fewer babies”. “Less” is used for a quantity, “fewer” for a number.
I’m probably missing something but it appears that you’re only searching for .c files in the nautilus-gio directory but both .c and .h files in the nautilus directory…
Mark: Header files generally don’t make function calls.
Yay! Thanks for your great work on Nautilus. It really rocks!
If there are no function calls in header files they shouldn’t be included in the nautilus search.
The difference will probably be negligible, but you can not simply claim that, you should measure it.
joeri:
What a ridiculous statement. After 7 years working on a codebase I’m not supposed to be able to claim basic facts about the code like whether it has code in the header files or not? Of course the difference is negligible, since it is zero.
If you don’t believe me, look for yourself.
Alex, rock on! Do you have some tools supporting you during this massive refactoring? Dude, 531 calls left – guess I’d feel quite discouraged to do this by hand.
Crazy idea: Maybe having a scripting doing the trivial refactoring scripts could help GIO adoption in the future?
Mathias:
No tools in particular, although i did write a short script to mass-rename C identifiers.
Things are not identical enough that this can be done very mechanically unfortunately.
thanks for all the hard work Alex! rock on!