@ -1,3 +1,15 @@ | |||||
# gamin-python3 | |||||
# Gamin, Python 3 migration | |||||
Gamin (File Alteration Monitor) - Python 3 migration | |||||
> Gamin (File Alteration Monitor) - Python 3 migration | |||||
[A patch](code/patch_python3.patch) in this repository adds Python 3 support for [Gamin File Alteration Monitor](https://people.gnome.org/~veillard/gamin/) and migrates from Python 2 to Python 3. It is necessary in modern environments using Gamin software. | |||||
Other patch files are hosted on [AUR - Gamin](https://aur.archlinux.org/packages/gamin/). | |||||
Gamin source code archive is provided as backup, as well. It can be found on [official Gamin website](https://people.gnome.org/~veillard/gamin/downloads.html). | |||||
Necessary files are in `code` subfolder. | |||||
## License | |||||
[LGPL3](LICENSE), same as used by Gamin. |
@ -0,0 +1,27 @@ | |||||
From b92b17ecced6df463da73d6de566740cf5cd00d4 Mon Sep 17 00:00:00 2001 | |||||
From: Marek Kasik <mkasik@redhat.com> | |||||
Date: Fri, 1 Feb 2013 15:19:58 +0100 | |||||
Subject: [PATCH 1/2] Poll files on nfs4 | |||||
Add nfs4 among polled filesystems. | |||||
https://bugzilla.gnome.org/show_bug.cgi?id=693006 | |||||
--- | |||||
server/gam_fs.c | 1 + | |||||
1 file changed, 1 insertion(+) | |||||
diff --git a/server/gam_fs.c b/server/gam_fs.c | |||||
index c8ca704..143a603 100644 | |||||
--- a/server/gam_fs.c | |||||
+++ b/server/gam_fs.c | |||||
@@ -178,6 +178,7 @@ gam_fs_init (void) | |||||
gam_fs_set ("reiserfs", GFS_MT_DEFAULT, 0); | |||||
gam_fs_set ("novfs", GFS_MT_POLL, 30); | |||||
gam_fs_set ("nfs", GFS_MT_POLL, 5); | |||||
+ gam_fs_set ("nfs4", GFS_MT_POLL, 5); | |||||
if (stat("/etc/mtab", &mtab_sbuf) != 0) | |||||
{ | |||||
GAM_DEBUG(DEBUG_INFO, "Could not stat /etc/mtab\n"); | |||||
-- | |||||
1.8.1.2 | |||||
@ -0,0 +1,70 @@ | |||||
From cc14440eface093548cb3bc7814da11d9a99d283 Mon Sep 17 00:00:00 2001 | |||||
From: Anssi Hannula <anssi@mageia.org> | |||||
Date: Wed, 4 Jan 2012 00:23:55 +0200 | |||||
Subject: [PATCH] fix possible server deadlock in ih_sub_cancel | |||||
ih_sub_foreach() calls ih_sub_cancel() while inotify_lock is locked. | |||||
However, ih_sub_cancel() locks it again, and locking GMutex recursively | |||||
causes undefined behaviour. | |||||
Fix that by removing locking from ih_sub_cancel() as ih_sub_foreach() | |||||
is its only user. Also make the function static so that it won't | |||||
accidentally get used by other files without locking (inotify-helper.h | |||||
is an internal server header). | |||||
This should fix the intermittent deadlocks I've been experiencing | |||||
causing KDE applications to no longer start, and probably also | |||||
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542361 | |||||
Origin: http://bugzilla-attachments.gnome.org/attachment.cgi?id=204537 | |||||
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gamin/+bug/926862 | |||||
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542361 | |||||
--- | |||||
server/inotify-helper.c | 7 ++----- | |||||
server/inotify-helper.h | 1 - | |||||
2 files changed, 2 insertions(+), 6 deletions(-) | |||||
diff --git a/server/inotify-helper.c b/server/inotify-helper.c | |||||
index d77203e..0789fa4 100644 | |||||
--- a/server/inotify-helper.c | |||||
+++ b/server/inotify-helper.c | |||||
@@ -123,13 +123,11 @@ ih_sub_add (ih_sub_t * sub) | |||||
/** | |||||
* Cancels a subscription which was being monitored. | |||||
+ * inotify_lock must be held when calling. | |||||
*/ | |||||
-gboolean | |||||
+static gboolean | |||||
ih_sub_cancel (ih_sub_t * sub) | |||||
{ | |||||
- G_LOCK(inotify_lock); | |||||
- | |||||
- | |||||
if (!sub->cancelled) | |||||
{ | |||||
IH_W("cancelling %s\n", sub->pathname); | |||||
@@ -140,7 +138,6 @@ ih_sub_cancel (ih_sub_t * sub) | |||||
sub_list = g_list_remove (sub_list, sub); | |||||
} | |||||
- G_UNLOCK(inotify_lock); | |||||
return TRUE; | |||||
} | |||||
diff --git a/server/inotify-helper.h b/server/inotify-helper.h | |||||
index 5d3b6d0..d36b5fd 100644 | |||||
--- a/server/inotify-helper.h | |||||
+++ b/server/inotify-helper.h | |||||
@@ -34,7 +34,6 @@ gboolean ih_startup (event_callback_t ecb, | |||||
found_callback_t fcb); | |||||
gboolean ih_running (void); | |||||
gboolean ih_sub_add (ih_sub_t *sub); | |||||
-gboolean ih_sub_cancel (ih_sub_t *sub); | |||||
/* Return FALSE from 'f' if the subscription should be cancelled */ | |||||
void ih_sub_foreach (void *callerdata, gboolean (*f)(ih_sub_t *sub, void *callerdata)); | |||||
-- | |||||
1.7.7.2 | |||||
@ -0,0 +1,56 @@ | |||||
# Maintainer: Pekka Helenius <fincer89@hotmail.com> | |||||
# Contributor: Abhishek Dasgupta <abhidg@gmail.com> | |||||
# Contributor: Pulphix <crimea.v@libero.it> | |||||
pkgname=gamin | |||||
pkgver=0.1.10 | |||||
pkgrel=10 | |||||
pkgdesc='File and directory monitoring system defined to be a subset of the FAM (File Alteration Monitor)' | |||||
url='http://www.gnome.org/~veillard/gamin' | |||||
license=('GPL') | |||||
arch=('any') | |||||
depends=('glib2') | |||||
makedepends=('python') | |||||
optdepends=('python: for the python module') | |||||
provides=('fam') | |||||
conflicts=('fam') | |||||
source=("$url/sources/${pkgname}-${pkgver}.tar.gz" | |||||
'fix-deprecated-const.patch' | |||||
'18_gam_server_deadlocks.patch' | |||||
'0001-Poll-files-on-nfs4.patch' | |||||
'patch_python3.patch' | |||||
) | |||||
sha512sums=('21bfe6fcf8fb3117cd5a08c8ce3b8d0d1dd23e478e60a95b76c20d02cc29b050dde086578d81037990484ff891c3e104d2cbbf3d294b4a79346b14a0cae075bb' | |||||
'c4c10bee70c7231db395cbfe5bdf513ade6be599a11a9d35888ddfaca42d619fe2b5e87c2b2bab469ea98ba718bc01711252313ba5f53c392379b669f5b2902b' | |||||
'ae2d3f3cd16e2da05836cbb2f21527896db5d5067ef4b120e943693234a685527eff528955ed80120265ca70e04a88cc28413cc34311d6faa068c620339fad38' | |||||
'dcb23fd68e106a1b578235ef0b01b49773908ca6ded706610103f880f77a2aa0b0403cb720b9c6b062bac71e9d66cd2288b489c558839fc23295b18635bf399f' | |||||
'7368286df3b2db9df02a585150bef5b9aa7f0b80cc913a7867739ccc1abf3f45674515c02fad9423607b9b7266a61884f01e43b89d29b16afbbf7524e75f21e7' | |||||
'323fa143947b7df0b746cac980f9a610f364883c94fdc3800f3cee2e3bfa6e5945cbff0a865f8a3349441127cc450a7be04be2073772fb3c6af227637542fa43' | |||||
'2cd2c49b588147f93753c6bb46afa9438cf0f63ff1a61761ae09b534658aceb0fd5f0eab9c7037bc3c890e63cba9407499c5b9c715a7568f2ec94f4565a6e40f' | |||||
'596efc8a9bb98bbeacb11a1995f54146fb68fefae28fa28db0728c47d61f10009b8aa0d91c54a4c73e5c6478b8d049c942a00131cbb5342a01f83c2dda103858' | |||||
'e5575ac8d5908926d5c7d26076b14980b328cd4caa695f8c2cdb21999dd4868da9c90d8d9c469bf1fe316ac752c2637b0525a79f9b9188778c82f6f96beecaac') | |||||
prepare() { | |||||
cd $pkgname-$pkgver | |||||
# https://bugs.archlinux.org/task/33642 | |||||
patch -Np1 -i ../18_gam_server_deadlocks.patch | |||||
patch -Np1 -i ../fix-deprecated-const.patch | |||||
patch -Np1 -i ../0001-Poll-files-on-nfs4.patch | |||||
patch -Np1 -i ../patch_python3.patch | |||||
} | |||||
build() { | |||||
cd $pkgname-$pkgver | |||||
./configure --prefix=/usr --disable-static --with-threads \ | |||||
--disable-debug-api --disable-debug --libexecdir=/usr/lib/gamin \ | |||||
--with-python=/usr/bin/python | |||||
make | |||||
} | |||||
package() { | |||||
cd $pkgname-$pkgver | |||||
make DESTDIR="$pkgdir" install | |||||
} |
@ -0,0 +1,56 @@ | |||||
Description: Don't use deprecated G_CONST_RETURN. Fixes building with newer glib versions. | |||||
Author: Matthias Klose <doko@ubuntu.com> | |||||
Bug-Ubuntu: https://launchpad.net/bugs/829504 | |||||
Index: gamin/server/gam_node.c | |||||
=================================================================== | |||||
--- gamin.orig/server/gam_node.c 2011-10-18 16:09:04.873780685 +0200 | |||||
+++ gamin/server/gam_node.c 2011-10-18 16:09:01.965780543 +0200 | |||||
@@ -122,7 +122,7 @@ | |||||
* it has finished with the string. If it must keep it longer, it | |||||
* should makes its own copy. The returned string must not be freed. | |||||
*/ | |||||
-G_CONST_RETURN char * | |||||
+const char * | |||||
gam_node_get_path(GamNode * node) | |||||
{ | |||||
g_assert(node); | |||||
Index: gamin/server/gam_node.h | |||||
=================================================================== | |||||
--- gamin.orig/server/gam_node.h 2011-10-18 16:09:04.729780677 +0200 | |||||
+++ gamin/server/gam_node.h 2011-10-18 16:09:01.961780544 +0200 | |||||
@@ -58,7 +58,7 @@ | |||||
void gam_node_set_is_dir (GamNode *node, | |||||
gboolean is_dir); | |||||
-G_CONST_RETURN char *gam_node_get_path (GamNode *node); | |||||
+const char *gam_node_get_path (GamNode *node); | |||||
GList *gam_node_get_subscriptions (GamNode *node); | |||||
Index: gamin/server/gam_subscription.c | |||||
=================================================================== | |||||
--- gamin.orig/server/gam_subscription.c 2011-10-18 16:09:04.817780682 +0200 | |||||
+++ gamin/server/gam_subscription.c 2011-10-18 16:09:01.965780543 +0200 | |||||
@@ -141,7 +141,7 @@ | |||||
* @param sub the GamSubscription | |||||
* @returns The path being monitored. It should not be freed. | |||||
*/ | |||||
-G_CONST_RETURN char * | |||||
+const char * | |||||
gam_subscription_get_path(GamSubscription * sub) | |||||
{ | |||||
if (sub == NULL) | |||||
Index: gamin/server/gam_subscription.h | |||||
=================================================================== | |||||
--- gamin.orig/server/gam_subscription.h 2011-10-18 16:09:04.929780687 +0200 | |||||
+++ gamin/server/gam_subscription.h 2011-10-18 16:09:01.965780543 +0200 | |||||
@@ -21,7 +21,7 @@ | |||||
int gam_subscription_get_reqno (GamSubscription *sub); | |||||
-G_CONST_RETURN char *gam_subscription_get_path (GamSubscription *sub); | |||||
+const char *gam_subscription_get_path (GamSubscription *sub); | |||||
GamListener *gam_subscription_get_listener (GamSubscription *sub); | |||||