Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package seadrive-fuse for openSUSE:Factory 
checked in at 2026-06-08 14:23:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/seadrive-fuse (Old)
 and      /work/SRC/openSUSE:Factory/.seadrive-fuse.new.2375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "seadrive-fuse"

Mon Jun  8 14:23:28 2026 rev:11 rq:1357904 version:3.0.23

Changes:
--------
--- /work/SRC/openSUSE:Factory/seadrive-fuse/seadrive-fuse.changes      
2026-05-12 19:30:17.388092681 +0200
+++ /work/SRC/openSUSE:Factory/.seadrive-fuse.new.2375/seadrive-fuse.changes    
2026-06-08 14:28:24.384739166 +0200
@@ -1,0 +2,5 @@
+Mon Jun  8 08:50:47 UTC 2026 - Paolo Stivanin <[email protected]>
+
+- update to 3.0.23 (no changelog).
+
+-------------------------------------------------------------------

Old:
----
  seadrive-fuse-3.0.22.tar.gz

New:
----
  seadrive-fuse-3.0.23.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ seadrive-fuse.spec ++++++
--- /var/tmp/diff_new_pack.zY31tM/_old  2026-06-08 14:28:25.152771035 +0200
+++ /var/tmp/diff_new_pack.zY31tM/_new  2026-06-08 14:28:25.152771035 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           seadrive-fuse
-Version:        3.0.22
+Version:        3.0.23
 Release:        0
 Summary:        SeaDrive daemon with FUSE interface
 License:        GPL-2.0-only

++++++ seadrive-fuse-3.0.22.tar.gz -> seadrive-fuse-3.0.23.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/seadrive-fuse-3.0.22/configure.ac 
new/seadrive-fuse-3.0.23/configure.ac
--- old/seadrive-fuse-3.0.22/configure.ac       2026-05-08 05:21:34.000000000 
+0200
+++ new/seadrive-fuse-3.0.23/configure.ac       2026-06-04 04:55:24.000000000 
+0200
@@ -2,7 +2,7 @@
 
 
 AC_PREREQ(2.61)
-AC_INIT([seadrive], [3.0.22], [[email protected]])
+AC_INIT([seadrive], [3.0.23], [[email protected]])
 AC_CONFIG_HEADER([config.h])
 
 AC_CONFIG_MACRO_DIR([m4])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/seadrive-fuse-3.0.22/debian/changelog 
new/seadrive-fuse-3.0.23/debian/changelog
--- old/seadrive-fuse-3.0.22/debian/changelog   2026-05-08 05:21:34.000000000 
+0200
+++ new/seadrive-fuse-3.0.23/debian/changelog   2026-06-04 04:55:24.000000000 
+0200
@@ -1,3 +1,9 @@
+seadrive-daemon (3.0.23) unstable; urgency=low
+
+  * new upstream release
+
+ -- Jonathan Xu <[email protected]>  Tue, 2 Jun 2026 10:30:00 +0800
+
 seadrive-daemon (3.0.22) unstable; urgency=low
 
   * new upstream release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/seadrive-fuse-3.0.22/src/fuse-ops.c 
new/seadrive-fuse-3.0.23/src/fuse-ops.c
--- old/seadrive-fuse-3.0.22/src/fuse-ops.c     2026-05-08 05:21:34.000000000 
+0200
+++ new/seadrive-fuse-3.0.23/src/fuse-ops.c     2026-06-04 04:55:24.000000000 
+0200
@@ -1875,7 +1875,7 @@
     seaf_debug ("setxattr: %s %s\n", path, name);
 
     // Manual setting of extended properties related to file locking is only 
supported. 
-    if (g_strcmp0("name", "user.seafile-status") != 0){
+    if (g_strcmp0(name, "user.seafile-status") != 0){
         return 0;
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/seadrive-fuse-3.0.22/src/journal-mgr.c 
new/seadrive-fuse-3.0.23/src/journal-mgr.c
--- old/seadrive-fuse-3.0.22/src/journal-mgr.c  2026-05-08 05:21:34.000000000 
+0200
+++ new/seadrive-fuse-3.0.23/src/journal-mgr.c  2026-06-04 04:55:24.000000000 
+0200
@@ -146,7 +146,7 @@
             goto out;
         }
     } else if (type == OP_TYPE_CREATE_FILE || type == OP_TYPE_UPDATE_FILE ||
-               type == OP_TYPE_UPDATE_ATTR) {
+               type == OP_TYPE_UPDATE_ATTR || type == OP_TYPE_MKDIR) {
         if (!json_object_has_member (obj, "size")) {
             seaf_warning ("Invalid operation format: no size.\n");
             goto out;
@@ -186,7 +186,7 @@
     if (op->type == OP_TYPE_RENAME) {
         json_object_set_string_member (obj, "new_path", op->new_path);
     } else if (op->type == OP_TYPE_CREATE_FILE || op->type == 
OP_TYPE_UPDATE_FILE ||
-               op->type == OP_TYPE_UPDATE_ATTR) {
+               op->type == OP_TYPE_UPDATE_ATTR || op->type == OP_TYPE_MKDIR) {
         json_object_set_int_member (obj, "size", op->size);
         json_object_set_int_member (obj, "mtime", op->mtime);
         json_object_set_int_member (obj, "mode", op->mode);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/seadrive-fuse-3.0.22/src/sync-mgr.c 
new/seadrive-fuse-3.0.23/src/sync-mgr.c
--- old/seadrive-fuse-3.0.22/src/sync-mgr.c     2026-05-08 05:21:34.000000000 
+0200
+++ new/seadrive-fuse-3.0.23/src/sync-mgr.c     2026-06-04 04:55:24.000000000 
+0200
@@ -154,6 +154,7 @@
 typedef struct _SyncTask SyncTask;
 
 struct _SyncError {
+    char *server;
     char *repo_id;
     char *repo_name;
     char *path;
@@ -186,6 +187,7 @@
 
     GAsyncQueue *lock_file_job_queue;
 
+    GHashTable *server_net_errors;
     GList *sync_errors;
     pthread_mutex_t errors_lock;
 
@@ -628,26 +630,40 @@
 
 static void
 record_sync_error (SeafSyncManager *mgr,
+                   const char *server,
                    const char *repo_id, const char *repo_name,
                    const char *path, int err_id)
 {
     GList *errors = mgr->priv->sync_errors, *ptr;
     SyncError *err, *new_err;
     gboolean found = FALSE;
+    int err_level = sync_error_level (err_id);
+    gboolean skip_notif = FALSE;
 
     // record sync error to database. 
     seaf_repo_manager_record_sync_error (seaf->repo_mgr, repo_id, repo_name, 
path, err_id);
 
     pthread_mutex_lock (&mgr->priv->errors_lock);
 
+    if (err_level == SYNC_ERROR_LEVEL_NETWORK && server) {
+        if (g_hash_table_lookup (mgr->priv->server_net_errors, server)) {
+            skip_notif = TRUE;
+        } else {
+            int dummy;
+            g_hash_table_insert (mgr->priv->server_net_errors, 
g_strdup(server), &dummy);
+        }
+    }
+
     for (ptr = errors; ptr; ptr = ptr->next) {
         err = ptr->data;
-        if (g_strcmp0 (err->repo_id, repo_id) == 0 &&
+        if (g_strcmp0 (err->server, server) == 0 &&
+            g_strcmp0 (err->repo_id, repo_id) == 0 &&
             g_strcmp0 (err->path, path) == 0) {
             found = TRUE;
             if (err->err_id != err_id) {
                 err->err_id = err_id;
-                send_sync_error_notification (repo_id, repo_name, path, 
err_id);
+                if (!skip_notif)
+                    send_sync_error_notification (repo_id, repo_name, path, 
err_id);
             }
             err->timestamp = (gint64)time(NULL);
             break;
@@ -656,6 +672,7 @@
 
     if (!found) {
         new_err = g_new0 (SyncError, 1);
+        new_err->server = g_strdup(server);
         new_err->repo_id = g_strdup(repo_id);
         new_err->repo_name = g_strdup(repo_name);
         new_err->path = g_strdup(path);
@@ -663,14 +680,15 @@
         new_err->timestamp = (gint64)time(NULL);
         mgr->priv->sync_errors = g_list_prepend (mgr->priv->sync_errors, 
new_err);
 
-        send_sync_error_notification (repo_id, repo_name, path, err_id);
+        if (!skip_notif)
+            send_sync_error_notification (repo_id, repo_name, path, err_id);
     }
 
     pthread_mutex_unlock (&mgr->priv->errors_lock);
 }
 
 static void
-remove_sync_error (SeafSyncManager *mgr, const char *repo_id, const char *path)
+remove_network_error (SeafSyncManager *mgr, const char *server, const char 
*repo_id, const char *path)
 {
     GList *ptr;
     SyncError *err;
@@ -685,9 +703,14 @@
         if (err_level != SYNC_ERROR_LEVEL_NETWORK) {
             continue;
         }
-        if (g_strcmp0 (err->repo_id, repo_id) == 0 &&
+        if (err->server != NULL) {
+            g_hash_table_remove (mgr->priv->server_net_errors, err->server);
+        }
+        if (g_strcmp0 (err->server, server) == 0 &&
+            g_strcmp0 (err->repo_id, repo_id) == 0 &&
             g_strcmp0 (err->path, path) == 0) {
             mgr->priv->sync_errors = g_list_delete_link 
(mgr->priv->sync_errors, ptr);
+            g_free (err->server);
             g_free (err->repo_id);
             g_free (err->repo_name);
             g_free (err->path);
@@ -704,6 +727,7 @@
 {
     GList *ptr;
     SyncError *err;
+    int err_level = sync_error_level (err_id);
 
     pthread_mutex_lock (&mgr->priv->errors_lock);
 
@@ -713,6 +737,10 @@
             g_strcmp0 (err->path, path) == 0 &&
             err->err_id == err_id) {
             mgr->priv->sync_errors = g_list_delete_link 
(mgr->priv->sync_errors, ptr);
+            if (err_level == SYNC_ERROR_LEVEL_NETWORK && err->server != NULL) {
+                g_hash_table_remove (mgr->priv->server_net_errors, 
err->server);
+            }
+            g_free (err->server);
             g_free (err->repo_id);
             g_free (err->repo_name);
             g_free (err->path);
@@ -738,6 +766,8 @@
     for (ptr = mgr->priv->sync_errors; ptr; ptr = ptr->next) {
         err = ptr->data;
         obj = json_object ();
+        if (err->server)
+            json_object_set_new (obj, "server", json_string(err->server));
         if (err->repo_id)
             json_object_set_new (obj, "repo_id", json_string(err->repo_id));
         if (err->repo_name)
@@ -919,8 +949,12 @@
             --(task->info->manager->priv->n_running_tasks);
             update_sync_info_error_state (task, new_state);
 
-            if (new_state == SYNC_STATE_DONE)
-                remove_sync_error (seaf->sync_mgr, task->info->repo_info->id, 
NULL);
+            if (new_state == SYNC_STATE_DONE) {
+                const char *server = NULL;
+                if (task->repo)
+                    server = task->repo->server;
+                remove_network_error (seaf->sync_mgr, server, 
task->info->repo_info->id, NULL);
+            }
 
             if (task->repo)
                 seaf_repo_unref (task->repo);
@@ -970,7 +1004,11 @@
             sync_error_id = transfer_error_to_error_id (task->tx_error_code);
         else
             sync_error_id = SYNC_ERROR_ID_GENERAL_ERROR;
+        const char *server = NULL;
+        if (task->repo)
+            server = task->repo->server;
         record_sync_error (seaf->sync_mgr,
+                           server,
                            task->info->repo_info->id,
                            task->info->repo_info->name,
                            task->unsyncable_path,
@@ -1049,6 +1087,9 @@
 
     mgr->priv->lock_file_job_queue = g_async_queue_new ();
 
+    mgr->priv->server_net_errors = g_hash_table_new_full (g_str_hash, 
g_str_equal,
+                                                        g_free, NULL);
+
     pthread_mutex_init (&mgr->priv->errors_lock, NULL);
 
     mgr->priv->cache_file_task_queue = g_async_queue_new ();
@@ -1392,7 +1433,7 @@
             result->http_status == HTTP_SERVERR_TIMEOUT) {
             seaf_repo_manager_set_account_server_disconnected (seaf->repo_mgr, 
account->server, account->username, TRUE);
         }
-        record_sync_error (seaf->sync_mgr, NULL, NULL, NULL,
+        record_sync_error (seaf->sync_mgr, account->server, NULL, NULL, NULL,
                            transfer_error_to_error_id (result->error_code));
         g_atomic_int_set (&seaf->sync_mgr->priv->server_disconnected, 1);
         return;
@@ -1403,7 +1444,7 @@
         if (account->server_disconnected) {
             seaf_sync_manager_check_locks_and_folder_perms (seaf->sync_mgr, 
account->fileserver_addr);
         }
-        remove_sync_error (seaf->sync_mgr, NULL, NULL);
+        remove_network_error (seaf->sync_mgr, account->server, NULL, NULL);
         g_atomic_int_set (&seaf->sync_mgr->priv->server_disconnected, 0);
         seaf_repo_manager_set_account_server_disconnected (seaf->repo_mgr, 
account->server, account->username, FALSE);
     }

Reply via email to