Date: Sunday, January 31, 2016 @ 08:07:45 Author: bgyorgy Revision: 159669
upgpkg: nemo 2.8.6-2 Fix FS#47480 Added: nemo/trunk/deep-count-one-filesystem.patch Modified: nemo/trunk/PKGBUILD ---------------------------------+ PKGBUILD | 12 ++- deep-count-one-filesystem.patch | 120 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-01-31 06:53:13 UTC (rev 159668) +++ PKGBUILD 2016-01-31 07:07:45 UTC (rev 159669) @@ -4,7 +4,7 @@ pkgname=nemo pkgver=2.8.6 -pkgrel=1 +pkgrel=2 pkgdesc="Cinnamon file manager (Nautilus fork)" arch=('i686' 'x86_64') url="https://github.com/linuxmint/nemo" @@ -14,8 +14,10 @@ makedepends=('gtk-doc' 'gobject-introspection' 'intltool' 'gnome-common' 'python2-gobject' 'python2-polib') options=('!emptydirs') install=nemo.install -source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/nemo/tarball/$pkgver") -sha256sums=('47fd96df864af5c74ed3abba4dcaf7ca5855289bbb61d58f14972200c169e84c') +source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/nemo/tarball/$pkgver" + "deep-count-one-filesystem.patch") +sha256sums=('47fd96df864af5c74ed3abba4dcaf7ca5855289bbb61d58f14972200c169e84c' + '1acd384b7e345d4e2815c51a94b4ffbb802ee376004c3db75cc871eef551cbfa') prepare() { cd linuxmint-nemo-* @@ -23,6 +25,10 @@ # Python2 fix find -type f | xargs sed -i 's@^#!.*python$@#!/usr/bin/python2@' + # directory: limit deep scount (folder contents and size) to one filesystem (FS#47480) + # https://github.com/linuxmint/nemo/pull/1083 + patch -Np1 -i ../deep-count-one-filesystem.patch + # Rename 'Files' app name to avoid having the same as nautilus sed -i 's/^Name\(.*\)=.*/Name\1=Nemo/' data/nemo.desktop.in.in } Added: deep-count-one-filesystem.patch =================================================================== --- deep-count-one-filesystem.patch (rev 0) +++ deep-count-one-filesystem.patch 2016-01-31 07:07:45 UTC (rev 159669) @@ -0,0 +1,120 @@ +From fe1f9cd21b521a5f2a89aa6be105fb1af86406b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <ballog...@gmail.com> +Date: Sun, 31 Jan 2016 07:56:28 +0100 +Subject: [PATCH] directory: limit deep scount (folder contents and size) to + one filesystem When getting the size of the root directory, nemo was + descending into other filesystems including /proc, causing it to report + nonsensical sizes. Store the fsid of the starting directory, and do not + recurse into other mount points. + +https://bugzilla.gnome.org/show_bug.cgi?id=629394 +https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/585472 + +Based on Nautilus commit: +https://git.gnome.org/browse/nautilus/commit/?id=a645da5f1043c59203fd194fe85b6976d75d2ece + +Original author: Phillip Susi <ps...@ubuntu.com> + +Fixes issue #1050. +--- + libnemo-private/nemo-directory-async.c | 45 ++++++++++++++++++++++++++++++---- + 1 file changed, 40 insertions(+), 5 deletions(-) + +diff --git a/libnemo-private/nemo-directory-async.c b/libnemo-private/nemo-directory-async.c +index 856ab0f..14c7026 100644 +--- a/libnemo-private/nemo-directory-async.c ++++ b/libnemo-private/nemo-directory-async.c +@@ -134,6 +134,7 @@ struct DeepCountState { + GFile *deep_count_location; + GList *deep_count_subdirectories; + GArray *seen_deep_count_inodes; ++ char *fs_id; + }; + + +@@ -2666,6 +2667,7 @@ deep_count_one (DeepCountState *state, + NemoFile *file; + GFile *subdir; + gboolean is_seen_inode; ++ const char *id; + gboolean hidden; + is_seen_inode = seen_inode (state, info); + if (!is_seen_inode) { +@@ -2684,10 +2686,13 @@ deep_count_one (DeepCountState *state, + file->details->deep_directory_count += 1; + } + /* Record the fact that we have to descend into this directory. */ +- +- subdir = g_file_get_child (state->deep_count_location, g_file_info_get_name (info)); +- state->deep_count_subdirectories = g_list_prepend +- (state->deep_count_subdirectories, subdir); ++ id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILESYSTEM); ++ if (g_strcmp0 (id, state->fs_id) == 0) { ++ /* only if it is on the same filesystem */ ++ subdir = g_file_get_child (state->deep_count_location, g_file_info_get_name (info)); ++ state->deep_count_subdirectories = g_list_prepend ++ (state->deep_count_subdirectories, subdir); ++ } + } else { + /* Even non-regular files count as files. */ + if (hidden) { +@@ -2719,6 +2724,7 @@ deep_count_state_free (DeepCountState *state) + } + g_list_free_full (state->deep_count_subdirectories, g_object_unref); + g_array_free (state->seen_deep_count_inodes, TRUE); ++ g_free (state->fs_id); + g_free (state); + } + +@@ -2865,6 +2871,7 @@ deep_count_load (DeepCountState *state, GFile *location) + G_FILE_ATTRIBUTE_STANDARD_SIZE "," + G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN "," + G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP "," ++ G_FILE_ATTRIBUTE_ID_FILESYSTEM "," + G_FILE_ATTRIBUTE_UNIX_INODE, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, /* flags */ + G_PRIORITY_LOW, /* prio */ +@@ -2896,6 +2903,27 @@ deep_count_stop (NemoDirectory *directory) + } + + static void ++deep_count_got_info (GObject *source_object, ++ GAsyncResult *res, ++ gpointer user_data) ++{ ++ GFileInfo *info; ++ const char *id; ++ GFile *file = (GFile *)source_object; ++ DeepCountState *state = (DeepCountState *)user_data; ++ ++ info = g_file_query_info_finish (file, ++ res, ++ NULL); ++ if (info) { ++ id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILESYSTEM); ++ state->fs_id = g_strdup (id); ++ g_object_unref (info); ++ } ++ deep_count_load (state, file); ++} ++ ++static void + deep_count_start (NemoDirectory *directory, + NemoFile *file, + gboolean *doing_io) +@@ -2943,7 +2971,14 @@ deep_count_start (NemoDirectory *directory, + directory->details->deep_count_in_progress = state; + + location = nemo_file_get_location (file); +- deep_count_load (state, location); ++ state->fs_id = NULL; ++ g_file_query_info_async (location, ++ G_FILE_ATTRIBUTE_ID_FILESYSTEM, ++ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, ++ G_PRIORITY_DEFAULT, ++ NULL, ++ deep_count_got_info, ++ state); + g_object_unref (location); + } +