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);
+ }
+ 

Reply via email to