[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