[arch-commits] Commit in nemo/trunk (PKGBUILD deep-count-one-filesystem.patch)
Balló György
bgyorgy at archlinux.org
Sun Jan 31 07:07:45 UTC 2016
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?= <ballogyor at 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 <psusi at 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);
+ }
+
More information about the arch-commits
mailing list