Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ibis for openSUSE:Factory checked in 
at 2025-12-31 10:48:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ibis (Old)
 and      /work/SRC/openSUSE:Factory/.ibis.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ibis"

Wed Dec 31 10:48:11 2025 rev:7 rq:1324867 version:0.15.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/ibis/ibis.changes        2025-05-22 
16:56:45.853644129 +0200
+++ /work/SRC/openSUSE:Factory/.ibis.new.1928/ibis.changes      2025-12-31 
10:48:43.593673355 +0100
@@ -1,0 +2,10 @@
+Wed Dec 31 00:24:49 UTC 2025 - Richard Rahl <[email protected]>
+
+- Update to version 0.15.0:
+  + Use strtoul instead of atoi when parsing hosts
+  + Rework the nick properties
+  + A few meson tweaks
+  + Fix a documentation warning
+  + Add a codespell unit test
+
+-------------------------------------------------------------------

Old:
----
  ibis-0.14.0.tar.xz
  ibis-0.14.0.tar.xz.asc

New:
----
  ibis-0.15.0.tar.xz
  ibis-0.15.0.tar.xz.asc

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

Other differences:
------------------
++++++ ibis.spec ++++++
--- /var/tmp/diff_new_pack.H6Jcnq/_old  2025-12-31 10:48:44.165696763 +0100
+++ /var/tmp/diff_new_pack.H6Jcnq/_new  2025-12-31 10:48:44.165696763 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ibis
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define         sover 0
 Name:           ibis
-Version:        0.14.0
+Version:        0.15.0
 Release:        0
 Summary:        Gobject based library
 License:        GPL-2.0-or-later

++++++ ibis-0.14.0.tar.xz -> ibis-0.15.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/.codespellrc new/ibis-0.15.0/.codespellrc
--- old/ibis-0.14.0/.codespellrc        1970-01-01 01:00:00.000000000 +0100
+++ new/ibis-0.15.0/.codespellrc        2025-12-30 09:48:39.000000000 +0100
@@ -0,0 +1,4 @@
+[codespell]
+skip = *.dat,*.gir,*.po,./subprojects/*,./*build*/*
+ignore-words-list = gir,inout
+check-filenames = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/.hg_archival.txt 
new/ibis-0.15.0/.hg_archival.txt
--- old/ibis-0.14.0/.hg_archival.txt    2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/.hg_archival.txt    2025-12-30 09:48:39.000000000 +0100
@@ -1,4 +1,4 @@
 repo: ee571f6e8e7556786ca8029199b9a669e850c8cb
-node: 9e6fca7a14f9aee6546b430196244e3d66a9822b
+node: 76aeb3e5b7566d1fbb87494963a887250503c42c
 branch: default
-tag: v0.14.0
+tag: v0.15.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ChangeLog new/ibis-0.15.0/ChangeLog
--- old/ibis-0.14.0/ChangeLog   2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ChangeLog   2025-12-30 09:48:39.000000000 +0100
@@ -1,3 +1,10 @@
+0.15.0: 2025-12-30
+  * Use strtoul instead of atoi when parsing hosts (RR 4132) (Gary Kramlich)
+  * Rework the nick properties (RR 4160) (Gary Kramlich)
+  * A few meson tweaks (RR 4199) (Gary Kramlich)
+  * Fix a documentation warning (RR 4260) (Gary Kramlich)
+  * Add a codespell unit test (RR 4266) (Gary Kramlich)
+
 0.14.0: 2025-04-30
   * Make sure the documentation lists all of our dependencies (RR 3959) (Gary
     Kramlich)
@@ -141,7 +148,7 @@
 
 0.5.0: 2024-08-15
   * Add a constant for IBIS_MSG_TAGMSG (RR 3377) (Gary Kramlich)
-  * Add contants for the typing client tag (IBIS-27) (RR 3378) (Gary Kramlich)
+  * Add constants for the typing client tag (IBIS-27) (RR 3378) (Gary Kramlich)
   * Add CTCPMessage for parsing and serializing CTCP messages (RR 3380) (Gary
     Kramlich)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ibis-0.14.0/containers/Dockerfile.debian-trixie-amd64 
new/ibis-0.15.0/containers/Dockerfile.debian-trixie-amd64
--- old/ibis-0.14.0/containers/Dockerfile.debian-trixie-amd64   2025-05-01 
01:18:52.000000000 +0200
+++ new/ibis-0.15.0/containers/Dockerfile.debian-trixie-amd64   2025-12-30 
09:48:39.000000000 +0100
@@ -1,30 +1,26 @@
 FROM docker.io/debian:trixie-slim
 
 RUN set -ex && \
-       apt-get update && \
-       apt-get install -y --no-install-recommends \
-               build-essential \
-               ca-certificates \
-               gcovr \
-               gettext \
-               gi-docgen \
-               git \
-               gobject-introspection \
-               libgirepository1.0-dev \
-               libglib2.0-dev \
-               libidn11-dev \
-               libpango1.0-dev \
-               mercurial \
-               meson \
-               python3-jinja2 \
-               python3-packaging \
-               python3-pygments \
-               python3-toml \
-               python3-typogrify \
-               zip \
-       && \
-       apt-get clean && \
-       rm -rf /var/lib/apt/lists
+    apt-get update && \
+    apt-get install -y --no-install-recommends \
+        build-essential \
+        ca-certificates \
+        codespell \
+        gcovr \
+        gettext \
+        gi-docgen \
+        git \
+        gobject-introspection \
+        libgirepository1.0-dev \
+        libglib2.0-dev \
+        libidn11-dev \
+        libpango1.0-dev \
+        mercurial \
+        meson \
+        zip \
+        && \
+    apt-get clean && \
+    rm -rf /var/lib/apt/lists
 
 COPY meson-build.sh /build.sh
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/containers/meson-build.sh 
new/ibis-0.15.0/containers/meson-build.sh
--- old/ibis-0.14.0/containers/meson-build.sh   2025-05-01 01:18:52.000000000 
+0200
+++ new/ibis-0.15.0/containers/meson-build.sh   2025-12-30 09:48:39.000000000 
+0100
@@ -2,7 +2,7 @@
 
 cd ${CONVEY_WORKSPACE}
 
-BUILD_DIR=${TARGET:-_build}
+BUILD_DIR=build-${TARGET:-convey}
 
 meson ${MESON_OPTIONS} "${BUILD_DIR}"
 meson compile -C "${BUILD_DIR}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/convey.yaml new/ibis-0.15.0/convey.yaml
--- old/ibis-0.14.0/convey.yaml 2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/convey.yaml 2025-12-30 09:48:39.000000000 +0100
@@ -12,7 +12,7 @@
   clean:
     type: convey/clean
     files:
-      - debian-trixie-amd64
+      - build-debian-trixie-amd64
 
   import:
     type: docker/import
@@ -24,7 +24,7 @@
 
   export:
     type: docker/export
-    files: ${TARGET}
+    files: build-${TARGET}
 
   login:
     type: docker/login
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/ibisclient.c 
new/ibis-0.15.0/ibis/ibisclient.c
--- old/ibis-0.14.0/ibis/ibisclient.c   2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis/ibisclient.c   2025-12-30 09:48:39.000000000 +0100
@@ -39,16 +39,19 @@
        PROP_ALT_NICK,
        PROP_CANCELLABLE,
        PROP_CAPABILITIES,
+       PROP_CLIENT_PING_TIMEOUT,
        PROP_CONNECTED,
        PROP_ERROR,
        PROP_FEATURES,
+       PROP_HASL_CONTEXT,
        PROP_NETWORK,
        PROP_NICK,
+       PROP_PRIMARY_NICK,
        PROP_REALNAME,
        PROP_REGISTERED,
+       PROP_SECONDARY_NICK,
+       PROP_TERTIARY_NICK,
        PROP_USERNAME,
-       PROP_HASL_CONTEXT,
-       PROP_CLIENT_PING_TIMEOUT,
        N_PROPERTIES,
 };
 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
@@ -80,8 +83,9 @@
        GOutputStream *output;
 
        char *network;
-       char *nick;
-       char *alt_nick;
+       char *primary_nick;
+       char *secondary_nick;
+       char *tertiary_nick;
        char *realname;
        char *username;
 
@@ -151,12 +155,16 @@
                return client->realname;
        }
 
-       if(!ibis_str_is_empty(client->nick)) {
-               return client->nick;
+       if(!ibis_str_is_empty(client->primary_nick)) {
+               return client->primary_nick;
+       }
+
+       if(!ibis_str_is_empty(client->secondary_nick)) {
+               return client->secondary_nick;
        }
 
-       if(!ibis_str_is_empty(client->alt_nick)) {
-               return client->alt_nick;
+       if(!ibis_str_is_empty(client->tertiary_nick)) {
+               return client->tertiary_nick;
        }
 
        return _("unknown");
@@ -170,12 +178,16 @@
                return client->username;
        }
 
-       if(!ibis_str_is_empty(client->nick)) {
-               return client->nick;
+       if(!ibis_str_is_empty(client->primary_nick)) {
+               return client->primary_nick;
        }
 
-       if(!ibis_str_is_empty(client->alt_nick)) {
-               return client->alt_nick;
+       if(!ibis_str_is_empty(client->secondary_nick)) {
+               return client->secondary_nick;
+       }
+
+       if(!ibis_str_is_empty(client->tertiary_nick)) {
+               return client->tertiary_nick;
        }
 
        return _("unknown");
@@ -254,14 +266,27 @@
                return;
        }
 
+       /* If we don't have an active nick, try the primary. */
        if(ibis_str_is_empty(client->active_nick)) {
-               candidate_nick = client->nick;
+               candidate_nick = client->primary_nick;
+       }
+
+       /* If we don't have a candidate yet and the active nick is the primary,
+        * try the secondary nick.
+        */
+       if(ibis_str_is_empty(candidate_nick) &&
+          ibis_str_equal(client->active_nick, client->primary_nick))
+       {
+               candidate_nick = client->secondary_nick;
        }
 
+       /* If we still don't have a candidate and the active nick is the 
secondary,
+        * try the tertiary nick.
+        */
        if(ibis_str_is_empty(candidate_nick) &&
-          ibis_str_equal(client->active_nick, client->nick))
+          ibis_str_equal(client->active_nick, client->secondary_nick))
        {
-               candidate_nick = client->alt_nick;
+               candidate_nick = client->tertiary_nick;
        }
 
        if(!ibis_str_is_empty(candidate_nick)) {
@@ -854,8 +879,9 @@
        g_clear_object(&client->hasl_context);
 
        g_clear_pointer(&client->network, g_free);
-       g_clear_pointer(&client->alt_nick, g_free);
-       g_clear_pointer(&client->nick, g_free);
+       g_clear_pointer(&client->primary_nick, g_free);
+       g_clear_pointer(&client->secondary_nick, g_free);
+       g_clear_pointer(&client->tertiary_nick, g_free);
        g_clear_pointer(&client->realname, g_free);
        g_clear_pointer(&client->username, g_free);
 
@@ -881,9 +907,6 @@
        case PROP_ACTIVE_NICK:
                g_value_set_string(value, ibis_client_get_active_nick(client));
                break;
-       case PROP_ALT_NICK:
-               g_value_set_string(value, ibis_client_get_alt_nick(client));
-               break;
        case PROP_CANCELLABLE:
                g_value_set_object(value, ibis_client_get_cancellable(client));
                break;
@@ -902,8 +925,9 @@
        case PROP_NETWORK:
                g_value_set_string(value, ibis_client_get_network(client));
                break;
+       case PROP_PRIMARY_NICK:
        case PROP_NICK:
-               g_value_set_string(value, ibis_client_get_nick(client));
+               g_value_set_string(value, ibis_client_get_primary_nick(client));
                break;
        case PROP_REALNAME:
                g_value_set_string(value, ibis_client_get_realname(client));
@@ -911,6 +935,13 @@
        case PROP_REGISTERED:
                g_value_set_boolean(value, ibis_client_get_registered(client));
                break;
+       case PROP_SECONDARY_NICK:
+       case PROP_ALT_NICK:
+               g_value_set_string(value, 
ibis_client_get_secondary_nick(client));
+               break;
+       case PROP_TERTIARY_NICK:
+               g_value_set_string(value, 
ibis_client_get_tertiary_nick(client));
+               break;
        case PROP_USERNAME:
                g_value_set_string(value, ibis_client_get_username(client));
                break;
@@ -933,23 +964,28 @@
        IbisClient *client = IBIS_CLIENT(obj);
 
        switch(param_id) {
-       case PROP_ALT_NICK:
-               ibis_client_set_alt_nick(client, g_value_get_string(value));
+       case PROP_CLIENT_PING_TIMEOUT:
+               ibis_client_set_client_ping_timeout(client, 
g_value_get_uint(value));
                break;
+       case PROP_HASL_CONTEXT:
+               ibis_client_set_hasl_context(client, g_value_get_object(value));
+               break;
+       case PROP_PRIMARY_NICK:
        case PROP_NICK:
-               ibis_client_set_nick(client, g_value_get_string(value));
+               ibis_client_set_primary_nick(client, g_value_get_string(value));
                break;
        case PROP_REALNAME:
                ibis_client_set_realname(client, g_value_get_string(value));
                break;
-       case PROP_USERNAME:
-               ibis_client_set_username(client, g_value_get_string(value));
+       case PROP_SECONDARY_NICK:
+       case PROP_ALT_NICK:
+               ibis_client_set_secondary_nick(client, 
g_value_get_string(value));
                break;
-       case PROP_HASL_CONTEXT:
-               ibis_client_set_hasl_context(client, g_value_get_object(value));
+       case PROP_TERTIARY_NICK:
+               ibis_client_set_tertiary_nick(client, 
g_value_get_string(value));
                break;
-       case PROP_CLIENT_PING_TIMEOUT:
-               ibis_client_set_client_ping_timeout(client, 
g_value_get_uint(value));
+       case PROP_USERNAME:
+               ibis_client_set_username(client, g_value_get_string(value));
                break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -1027,11 +1063,13 @@
         * The alternative nick to use if [property@Client:nick] is already in 
use.
         *
         * Since: 0.1
+        *
+        * Deprecated: 0.15: use [property@Client:secondary-nick]
         */
        properties[PROP_ALT_NICK] = g_param_spec_string(
                "alt-nick", NULL, NULL,
                NULL,
-               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | 
G_PARAM_DEPRECATED);
 
        /**
         * IbisClient:cancellable:
@@ -1121,10 +1159,24 @@
         * [property@Client:alt-nick] will be made.
         *
         * Since: 0.1
+        *
+        * Deprecated: 0.15: Use [property@Client:primary-nick]
         */
        properties[PROP_NICK] = g_param_spec_string(
                "nick", NULL, NULL,
                NULL,
+               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | 
G_PARAM_DEPRECATED);
+
+       /**
+        * IbisClient:primary-nick:
+        *
+        * The primary nick to use.
+        *
+        * Since: 0.15
+        */
+       properties[PROP_PRIMARY_NICK] = g_param_spec_string(
+               "primary-nick", NULL, NULL,
+               NULL,
                G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
        /**
@@ -1157,6 +1209,30 @@
                G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
        /**
+        * IbisClient:secondary-nick:
+        *
+        * The secondary nick to use.
+        *
+        * Since: 0.15
+        */
+       properties[PROP_SECONDARY_NICK] = g_param_spec_string(
+               "secondary-nick", NULL, NULL,
+               NULL,
+               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+       /**
+        * IbisClient:tertiary-nick:
+        *
+        * The tertiary nick to use.
+        *
+        * Since: 0.15
+        */
+       properties[PROP_TERTIARY_NICK] = g_param_spec_string(
+               "tertiary-nick", NULL, NULL,
+               NULL,
+               G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+       /**
         * IbisClient:username:
         *
         * The username to use when sending the USER command.
@@ -1370,16 +1446,7 @@
 ibis_client_get_alt_nick(IbisClient *client) {
        g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
 
-       return client->alt_nick;
-}
-
-void
-ibis_client_set_alt_nick(IbisClient *client, const char *alt_nick) {
-       g_return_if_fail(IBIS_IS_CLIENT(client));
-
-       if(g_set_str(&client->alt_nick, alt_nick)) {
-               g_object_notify_by_pspec(G_OBJECT(client), 
properties[PROP_ALT_NICK]);
-       }
+       return ibis_client_get_secondary_nick(client);
 }
 
 GCancellable *
@@ -1432,16 +1499,6 @@
        return client->hasl_context;
 }
 
-void
-ibis_client_set_hasl_context(IbisClient *client, HaslContext *hasl_context) {
-       g_return_if_fail(IBIS_IS_CLIENT(client));
-
-       if(g_set_object(&client->hasl_context, hasl_context)) {
-               g_object_notify_by_pspec(G_OBJECT(client),
-                                        properties[PROP_HASL_CONTEXT]);
-       }
-}
-
 const char *
 ibis_client_get_network(IbisClient *client) {
        g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
@@ -1453,7 +1510,7 @@
 ibis_client_get_nick(IbisClient *client) {
        g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
 
-       return client->nick;
+       return ibis_client_get_primary_nick(client);
 }
 
 char
@@ -1463,14 +1520,11 @@
        return ibis_features_get_prefix_for_mode(client->features, mode);
 }
 
-void
-ibis_client_set_nick(IbisClient *client, const char *nick) {
-       g_return_if_fail(IBIS_IS_CLIENT(client));
-       g_return_if_fail(!ibis_str_is_empty(nick));
+const char *
+ibis_client_get_primary_nick(IbisClient *client) {
+       g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
 
-       if(g_set_str(&client->nick, nick)) {
-               g_object_notify_by_pspec(G_OBJECT(client), 
properties[PROP_NICK]);
-       }
+       return client->primary_nick;
 }
 
 const char *
@@ -1487,14 +1541,11 @@
        return client->registered;
 }
 
-void
-ibis_client_set_realname(IbisClient *client, const char *realname) {
-       g_return_if_fail(IBIS_IS_CLIENT(client));
-       g_return_if_fail(realname == NULL || realname[0] != '\0');
+const char *
+ibis_client_get_secondary_nick(IbisClient *client) {
+       g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
 
-       if(g_set_str(&client->realname, realname)) {
-               g_object_notify_by_pspec(G_OBJECT(client), 
properties[PROP_REALNAME]);
-       }
+       return client->secondary_nick;
 }
 
 char *
@@ -1513,20 +1564,17 @@
 }
 
 const char *
-ibis_client_get_username(IbisClient *client) {
+ibis_client_get_tertiary_nick(IbisClient *client) {
        g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
 
-       return client->username;
+       return client->tertiary_nick;
 }
 
-void
-ibis_client_set_username(IbisClient *client, const char *username) {
-       g_return_if_fail(IBIS_IS_CLIENT(client));
-       g_return_if_fail(username == NULL || username[0] != '\0');
+const char *
+ibis_client_get_username(IbisClient *client) {
+       g_return_val_if_fail(IBIS_IS_CLIENT(client), NULL);
 
-       if(g_set_str(&client->username, username)) {
-               g_object_notify_by_pspec(G_OBJECT(client), 
properties[PROP_USERNAME]);
-       }
+       return client->username;
 }
 
 gboolean
@@ -1683,6 +1731,13 @@
 }
 
 void
+ibis_client_set_alt_nick(IbisClient *client, const char *alt_nick) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+
+       ibis_client_set_secondary_nick(client, alt_nick);
+}
+
+void
 ibis_client_set_client_ping_timeout(IbisClient *client, guint seconds) {
        g_return_if_fail(IBIS_IS_CLIENT(client));
        g_return_if_fail(seconds > 0);
@@ -1695,6 +1750,87 @@
        }
 }
 
+void
+ibis_client_set_hasl_context(IbisClient *client, HaslContext *hasl_context) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+
+       if(g_set_object(&client->hasl_context, hasl_context)) {
+               g_object_notify_by_pspec(G_OBJECT(client),
+                                        properties[PROP_HASL_CONTEXT]);
+       }
+}
+
+void
+ibis_client_set_nick(IbisClient *client, const char *nick) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+       g_return_if_fail(!ibis_str_is_empty(nick));
+
+       ibis_client_set_primary_nick(client, nick);
+}
+
+void
+ibis_client_set_primary_nick(IbisClient *client, const char *nick) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+       g_return_if_fail(!ibis_str_is_empty(nick));
+
+       if(g_set_str(&client->primary_nick, nick)) {
+               GObject *obj = G_OBJECT(client);
+
+               g_object_freeze_notify(obj);
+               g_object_notify_by_pspec(obj, properties[PROP_PRIMARY_NICK]);
+               g_object_notify_by_pspec(obj, properties[PROP_NICK]);
+               g_object_thaw_notify(obj);
+       }
+}
+
+void
+ibis_client_set_realname(IbisClient *client, const char *realname) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+
+       /* The realname can be null, but if it isn't it must not be empty. */
+       g_return_if_fail(realname == NULL || realname[0] != '\0');
+
+       if(g_set_str(&client->realname, realname)) {
+               g_object_notify_by_pspec(G_OBJECT(client), 
properties[PROP_REALNAME]);
+       }
+}
+
+void
+ibis_client_set_secondary_nick(IbisClient *client, const char *nick) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+
+       if(g_set_str(&client->secondary_nick, nick)) {
+               GObject *obj = G_OBJECT(client);
+
+               g_object_freeze_notify(obj);
+               g_object_notify_by_pspec(obj, properties[PROP_SECONDARY_NICK]);
+               g_object_notify_by_pspec(obj, properties[PROP_ALT_NICK]);
+               g_object_thaw_notify(obj);
+       }
+}
+
+void
+ibis_client_set_tertiary_nick(IbisClient *client, const char *nick) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+
+       if(g_set_str(&client->tertiary_nick, nick)) {
+               g_object_notify_by_pspec(G_OBJECT(client),
+                                        properties[PROP_TERTIARY_NICK]);
+       }
+}
+
+void
+ibis_client_set_username(IbisClient *client, const char *username) {
+       g_return_if_fail(IBIS_IS_CLIENT(client));
+
+       /* The username can be null, but if it isn't it must not be empty. */
+       g_return_if_fail(username == NULL || username[0] != '\0');
+
+       if(g_set_str(&client->username, username)) {
+               g_object_notify_by_pspec(G_OBJECT(client), 
properties[PROP_USERNAME]);
+       }
+}
+
 void
 ibis_client_start(IbisClient *client, GIOStream *stream, const char *password,
                   GCancellable *cancellable)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/ibisclient.h 
new/ibis-0.15.0/ibis/ibisclient.h
--- old/ibis-0.14.0/ibis/ibisclient.h   2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis/ibisclient.h   2025-12-30 09:48:39.000000000 +0100
@@ -180,21 +180,10 @@
  *
  * Since: 0.1
  */
-IBIS_AVAILABLE_IN_0_1
+IBIS_DEPRECATED_FOR(ibis_client_get_secondary_nick)
 const char *ibis_client_get_alt_nick(IbisClient *client);
 
 /**
- * ibis_client_set_alt_nick:
- * @alt_nick: (nullable): the new alternative nick
- *
- * Sets the alternative nick of @client to @alt_nick.
- *
- * Since: 0.1
- */
-IBIS_AVAILABLE_IN_0_1
-void ibis_client_set_alt_nick(IbisClient *client, const char *alt_nick);
-
-/**
  * ibis_client_get_cancellable:
  *
  * Gets the [[email protected]] for @client.
@@ -280,21 +269,6 @@
 HaslContext *ibis_client_get_hasl_context(IbisClient *client);
 
 /**
- * ibis_client_set_hasl_context:
- * @hasl_context: (nullable) (transfer none): the new context to set
- *
- * Sets the [[email protected]] for @client to use.
- *
- * You should avoid switching this out during registration. If you want to
- * remove this from memory you should connect to the `notify::connected` signal
- * and set it to %NULL from that handler.
- *
- * Since: 0.1
- */
-IBIS_AVAILABLE_IN_0_1
-void ibis_client_set_hasl_context(IbisClient *client, HaslContext 
*hasl_context);
-
-/**
  * ibis_client_get_network:
  *
  * Gets the network that the client is connected to.
@@ -315,7 +289,7 @@
  *
  * Since: 0.1
  */
-IBIS_AVAILABLE_IN_0_1
+IBIS_DEPRECATED_FOR(ibis_client_get_primary_nick)
 const char *ibis_client_get_nick(IbisClient *client);
 
 /**
@@ -335,15 +309,16 @@
 char ibis_client_get_prefix_for_mode(IbisClient *client, char mode);
 
 /**
- * ibis_client_set_nick:
- * @nick: the new nick
+ * ibis_client_get_primary_nick:
  *
- * Sets the nick of @client to @nick.
+ * Gets the primary nick.
  *
- * Since: 0.1
+ * Returns: (nullable): The primary nick.
+ *
+ * Since: 0.15
  */
-IBIS_AVAILABLE_IN_0_1
-void ibis_client_set_nick(IbisClient *client, const char *nick);
+IBIS_AVAILABLE_IN_0_15
+const char *ibis_client_get_primary_nick(IbisClient *client);
 
 /**
  * ibis_client_get_realname:
@@ -362,17 +337,6 @@
 const char *ibis_client_get_realname(IbisClient *client);
 
 /**
- * ibis_client_set_realname:
- * @realname: (nullable): the new realname
- *
- * Sets the realname to use when sending the `USER` command.
- *
- * Since: 0.1
- */
-IBIS_AVAILABLE_IN_0_1
-void ibis_client_set_realname(IbisClient *client, const char *realname);
-
-/**
  * ibis_client_get_registered:
  *
  * Checks whether the client has completed user registration.
@@ -389,6 +353,18 @@
 gboolean ibis_client_get_registered(IbisClient *client);
 
 /**
+ * ibis_client_get_secondary_nick:
+ *
+ * Gets the secondary nick.
+ *
+ * Returns: (nullable): The secondary nick to use.
+ *
+ * Since: 0.15
+ */
+IBIS_AVAILABLE_IN_0_15
+const char *ibis_client_get_secondary_nick(IbisClient *client);
+
+/**
  * ibis_client_get_source_prefix:
  * @source: the source
  *
@@ -403,6 +379,18 @@
 char *ibis_client_get_source_prefix(IbisClient *client, const char *source);
 
 /**
+ * ibis_client_get_tertiary_nick:
+ *
+ * Gets the tertiary nick.
+ *
+ * Returns: (nullable): The tertiary nick to use.
+ *
+ * Since: 0.15
+ */
+IBIS_AVAILABLE_IN_0_15
+const char *ibis_client_get_tertiary_nick(IbisClient *client);
+
+/**
  * ibis_client_get_username:
  *
  * Gets the username that is being used when sending the `USER` command.
@@ -419,17 +407,6 @@
 const char *ibis_client_get_username(IbisClient *client);
 
 /**
- * ibis_client_set_username:
- * @username: (nullable): the new username
- *
- * Sets the username to use when sending the `USER` command.
- *
- * Since: 0.1
- */
-IBIS_AVAILABLE_IN_0_1
-void ibis_client_set_username(IbisClient *client, const char *username);
-
-/**
  * ibis_client_is_channel:
  * @target: the target
  *
@@ -496,6 +473,17 @@
 IbisModeChange *ibis_client_parse_mode_string(IbisClient *client, const char 
*mode_string, GStrv params, guint *n_changes, GError **error);
 
 /**
+ * ibis_client_set_alt_nick:
+ * @alt_nick: (nullable): the new alternative nick
+ *
+ * Sets the alternative nick of @client to @alt_nick.
+ *
+ * Since: 0.1
+ */
+IBIS_DEPRECATED_FOR(ibis_client_set_secondary_nick)
+void ibis_client_set_alt_nick(IbisClient *client, const char *alt_nick);
+
+/**
  * ibis_client_set_client_ping_timeout:
  * @seconds: the number of seconds before time out.
  *
@@ -509,6 +497,87 @@
 void ibis_client_set_client_ping_timeout(IbisClient *client, guint seconds);
 
 /**
+ * ibis_client_set_hasl_context:
+ * @hasl_context: (nullable) (transfer none): the new context to set
+ *
+ * Sets the [[email protected]] for @client to use.
+ *
+ * You should avoid switching this out during registration. If you want to
+ * remove this from memory you should connect to the `notify::connected` signal
+ * and set it to %NULL from that handler.
+ *
+ * Since: 0.1
+ */
+IBIS_AVAILABLE_IN_0_1
+void ibis_client_set_hasl_context(IbisClient *client, HaslContext 
*hasl_context);
+
+/**
+ * ibis_client_set_nick:
+ * @nick: the new nick
+ *
+ * Sets the nick of @client to @nick.
+ *
+ * Since: 0.1
+ */
+IBIS_DEPRECATED_FOR(ibis_client_set_primary_nick)
+void ibis_client_set_nick(IbisClient *client, const char *nick);
+
+/**
+ * ibis_client_set_primary_nick:
+ * @nick: the new nick
+ *
+ * Sets the primary nick.
+ *
+ * Since: 0.15
+ */
+IBIS_AVAILABLE_IN_0_15
+void ibis_client_set_primary_nick(IbisClient *client, const char *nick);
+
+/**
+ * ibis_client_set_realname:
+ * @realname: (nullable): the new realname
+ *
+ * Sets the realname to use when sending the `USER` command.
+ *
+ * Since: 0.1
+ */
+IBIS_AVAILABLE_IN_0_1
+void ibis_client_set_realname(IbisClient *client, const char *realname);
+
+/**
+ * ibis_client_set_secondary_nick:
+ * @nick: (nullable): the new nick
+ *
+ * Sets the secondary nick.
+ *
+ * Since: 0.15
+ */
+IBIS_AVAILABLE_IN_0_15
+void ibis_client_set_secondary_nick(IbisClient *client, const char *nick);
+
+/**
+ * ibis_client_set_tertiary_nick:
+ * @nick: (nullable): the new nick
+ *
+ * Sets the tertiary nick.
+ *
+ * Since: 0.15
+ */
+IBIS_AVAILABLE_IN_0_15
+void ibis_client_set_tertiary_nick(IbisClient *client, const char *nick);
+
+/**
+ * ibis_client_set_username:
+ * @username: (nullable): the new username
+ *
+ * Sets the username to use when sending the `USER` command.
+ *
+ * Since: 0.1
+ */
+IBIS_AVAILABLE_IN_0_1
+void ibis_client_set_username(IbisClient *client, const char *username);
+
+/**
  * ibis_client_start:
  * @stream: the [[email protected]] to process
  * @password: (nullable): the optional server password to use
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/ibisdcc.c 
new/ibis-0.15.0/ibis/ibisdcc.c
--- old/ibis-0.14.0/ibis/ibisdcc.c      2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis/ibisdcc.c      2025-12-30 09:48:39.000000000 +0100
@@ -22,6 +22,8 @@
 
 #include <stdlib.h>
 
+#include <errno.h>
+
 #include "ibisdcc.h"
 
 #include "ibisstring.h"
@@ -32,7 +34,9 @@
 GInetAddress *
 ibis_dcc_host_parse(const char *host) {
        GInetAddress *address = NULL;
-       guint32 value = 0;
+       gulong parsed_value = 0;
+       guint32 network_value = 0;
+       char *endptr = NULL;
 
        g_return_val_if_fail(!ibis_str_is_empty(host), NULL);
 
@@ -45,8 +49,27 @@
        /* That didn't work, so let's see if this is an integer that we can turn
         * into an IPv4 address.
         */
-       value = g_htonl(atoi(host));
-       address = g_inet_address_new_from_bytes((const guint8 *)&value,
+       parsed_value = strtoul(host, &endptr, 10);
+
+       /* ULONG_MAX is returned on an overflow. */
+       if(parsed_value == ULONG_MAX) {
+               if(errno == ERANGE || errno == EINVAL) {
+                       return NULL;
+               }
+       }
+
+       /* If parsing failed, endptr will point to the string value. */
+       if(endptr == host) {
+               return NULL;
+       }
+
+       /* Finally make sure we're within our expected range. */
+       if(parsed_value > G_MAXUINT32) {
+               return NULL;
+       }
+
+       network_value = g_htonl(parsed_value & 0xffffffff);
+       address = g_inet_address_new_from_bytes((const guint8 *)&network_value,
                                                G_SOCKET_FAMILY_IPV4);
        if(G_IS_INET_ADDRESS(address)) {
                return address;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/ibismessage.c 
new/ibis-0.15.0/ibis/ibismessage.c
--- old/ibis-0.14.0/ibis/ibismessage.c  2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis/ibismessage.c  2025-12-30 09:48:39.000000000 +0100
@@ -391,7 +391,7 @@
         *
         * This could be something like JOIN or a server reply numeric like 005.
         *
-        * As of version 0.4, this will now be automatically noramlized to
+        * As of version 0.4, this will now be automatically normalized to
         * uppercase to help with comparison.
         *
         * Since: 0.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/ibisversion.h 
new/ibis-0.15.0/ibis/ibisversion.h
--- old/ibis-0.14.0/ibis/ibisversion.h  2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis/ibisversion.h  2025-12-30 09:48:39.000000000 +0100
@@ -461,6 +461,30 @@
 #define IBIS_AVAILABLE_TYPE_IN_0_14
 #endif
 
+/**
+ * IBIS_VERSION_0_15:
+ *
+ * A macro that evaluates to the 0.15 version of ibis, in a format that can be
+ * used by the C pre-processor.
+ *
+ * Since: 0.15
+ */
+#define IBIS_VERSION_0_15 (G_ENCODE_VERSION(0, 15))
+
+#if IBIS_VERSION_MAX_ALLOWED < IBIS_VERSION_0_15
+#define IBIS_AVAILABLE_IN_0_15 IBIS_UNAVAILABLE(0, 15)
+#define IBIS_AVAILABLE_STATIC_INLINE_IN_0_15 IBIS_UNAVAILABLE_STATIC_INLINE(0, 
15)
+#define IBIS_AVAILABLE_MACRO_IN_0_15 IBIS_UNAVAILABLE_MACRO(0, 15)
+#define IBIS_AVAILABLE_ENUMERATOR_IN_0_15 IBIS_UNAVAILABLE_ENUMERATOR(0, 15)
+#define IBIS_AVAILABLE_TYPE_IN_0_15 IBIS_UNAVAILABLE_TYPE(0, 15)
+#else
+#define IBIS_AVAILABLE_IN_0_15 _IBIS_EXTERN
+#define IBIS_AVAILABLE_STATIC_INLINE_IN_0_15
+#define IBIS_AVAILABLE_MACRO_IN_0_15
+#define IBIS_AVAILABLE_ENUMERATOR_IN_0_15
+#define IBIS_AVAILABLE_TYPE_IN_0_15
+#endif
+
 G_BEGIN_DECLS
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/tests/meson.build 
new/ibis-0.15.0/ibis/tests/meson.build
--- old/ibis-0.14.0/ibis/tests/meson.build      2025-05-01 01:18:52.000000000 
+0200
+++ new/ibis-0.15.0/ibis/tests/meson.build      2025-12-30 09:48:39.000000000 
+0100
@@ -15,11 +15,14 @@
   'tags',
 ]
 
+testenv = environment()
+testenv.set('G_ENABLE_DIAGNOSTIC', '1')
+
 foreach test_program : test_programs
   exe = executable(
     f'test_@test_program@',
     f'test_@[email protected]',
     dependencies : [glib_dep, gio_dep, ibis_dep])
 
-  test(test_program, exe)
+  test(test_program, exe, env: testenv)
 endforeach
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/tests/test_client.c 
new/ibis-0.15.0/ibis/tests/test_client.c
--- old/ibis-0.14.0/ibis/tests/test_client.c    2025-05-01 01:18:52.000000000 
+0200
+++ new/ibis-0.15.0/ibis/tests/test_client.c    2025-12-30 09:48:39.000000000 
+0100
@@ -31,39 +31,39 @@
        IbisFeatures *features = NULL;
        GCancellable *cancellable = NULL;
        GError *error = NULL;
-       char *alt_nick = NULL;
-       char *nick = NULL;
+       char *primary_nick = NULL;
        char *realname = NULL;
+       char *secondary_nick = NULL;
+       char *tertiary_nick = NULL;
        char *username = NULL;
        gboolean connected = FALSE;
        guint client_ping_timeout = 0;
 
        client = g_object_new(
                IBIS_TYPE_CLIENT,
-               "alt-nick", "nick1",
                "client-ping-timeout", 1000,
-               "nick", "nick",
+               "primary-nick", "nick",
                "realname", "realname",
+               "secondary-nick", "nick1",
+               "tertiary-nick", "nick2",
                "username", "username",
                NULL);
 
        g_object_get(
                G_OBJECT(client),
-               "alt-nick", &alt_nick,
                "cancellable", &cancellable,
                "capabilities", &capabilities,
                "client-ping-timeout", &client_ping_timeout,
                "connected", &connected,
                "error", &error,
                "features", &features,
-               "nick", &nick,
+               "primary_nick", &primary_nick,
                "realname", &realname,
+               "secondary-nick", &secondary_nick,
+               "tertiary-nick", &tertiary_nick,
                "username", &username,
                NULL);
 
-       g_assert_cmpstr(alt_nick, ==, "nick1");
-       g_clear_pointer(&alt_nick, g_free);
-
        g_assert_null(cancellable);
 
        g_assert_true(IBIS_IS_CAPABILITIES(capabilities));
@@ -78,12 +78,18 @@
        g_assert_true(IBIS_IS_FEATURES(features));
        g_clear_object(&features);
 
-       g_assert_cmpstr(nick, ==, "nick");
-       g_clear_pointer(&nick, g_free);
+       g_assert_cmpstr(primary_nick, ==, "nick");
+       g_clear_pointer(&primary_nick, g_free);
 
        g_assert_cmpstr(realname, ==, "realname");
        g_clear_pointer(&realname, g_free);
 
+       g_assert_cmpstr(secondary_nick, ==, "nick1");
+       g_clear_pointer(&secondary_nick, g_free);
+
+       g_assert_cmpstr(tertiary_nick, ==, "nick2");
+       g_clear_pointer(&tertiary_nick, g_free);
+
        g_assert_cmpstr(username, ==, "username");
        g_clear_pointer(&username, g_free);
 
@@ -91,28 +97,66 @@
 }
 
 static void
-test_ibis_client_alt_nick(void) {
+test_ibis_client_secondary_nick(void) {
        IbisClient *client = NULL;
+       const char *secondary_nick = NULL;
        const char *alt_nick = NULL;
 
        client = ibis_client_new();
 
-       ibis_client_set_alt_nick(client, "alt");
+       ibis_client_set_secondary_nick(client, "secondary");
+       secondary_nick = ibis_client_get_secondary_nick(client);
+       g_assert_cmpstr(secondary_nick, ==, "secondary");
+
+       G_GNUC_BEGIN_IGNORE_DEPRECATIONS
        alt_nick = ibis_client_get_alt_nick(client);
-       g_assert_cmpstr(alt_nick, ==, "alt");
+       G_GNUC_END_IGNORE_DEPRECATIONS
+       g_assert_cmpstr(alt_nick, ==, "secondary");
+
+       ibis_client_set_secondary_nick(client, NULL);
+       secondary_nick = ibis_client_get_secondary_nick(client);
+       g_assert_cmpstr(secondary_nick, ==, NULL);
 
-       ibis_client_set_alt_nick(client, NULL);
+       G_GNUC_BEGIN_IGNORE_DEPRECATIONS
        alt_nick = ibis_client_get_alt_nick(client);
-       g_assert_null(alt_nick);
+       G_GNUC_END_IGNORE_DEPRECATIONS
+       g_assert_cmpstr(alt_nick, ==, NULL);
 
-       ibis_client_set_alt_nick(client, "");
+       ibis_client_set_secondary_nick(client, "");
+       secondary_nick = ibis_client_get_secondary_nick(client);
+       g_assert_cmpstr(secondary_nick, ==, "");
+
+       G_GNUC_BEGIN_IGNORE_DEPRECATIONS
        alt_nick = ibis_client_get_alt_nick(client);
+       G_GNUC_END_IGNORE_DEPRECATIONS
        g_assert_cmpstr(alt_nick, ==, "");
 
        g_assert_finalize_object(client);
 }
 
 static void
+test_ibis_client_tertiary_nick(void) {
+       IbisClient *client = NULL;
+       const char *tertiary_nick = NULL;
+
+       client = ibis_client_new();
+
+       ibis_client_set_tertiary_nick(client, "tertiary");
+       tertiary_nick = ibis_client_get_tertiary_nick(client);
+       g_assert_cmpstr(tertiary_nick, ==, "tertiary");
+
+       ibis_client_set_tertiary_nick(client, NULL);
+       tertiary_nick = ibis_client_get_tertiary_nick(client);
+       g_assert_cmpstr(tertiary_nick, ==, NULL);
+
+       ibis_client_set_tertiary_nick(client, "");
+       tertiary_nick = ibis_client_get_tertiary_nick(client);
+       g_assert_cmpstr(tertiary_nick, ==, "");
+
+       g_assert_finalize_object(client);
+}
+
+static void
 test_ibis_client_realname_null(void) {
        IbisClient *client = NULL;
        const char *realname = NULL;
@@ -125,7 +169,7 @@
 
        ibis_client_set_realname(client, NULL);
        realname = ibis_client_get_realname(client);
-       g_assert_null(realname);
+       g_assert_cmpstr(realname, ==, NULL);
 
        g_assert_finalize_object(client);
 }
@@ -158,7 +202,7 @@
 
        ibis_client_set_username(client, NULL);
        username = ibis_client_get_username(client);
-       g_assert_null(username);
+       g_assert_cmpstr(username, ==, NULL);
 
        g_assert_finalize_object(client);
 }
@@ -220,7 +264,7 @@
        client = ibis_client_new();
 
        network = ibis_client_get_network(client);
-       g_assert_null(network);
+       g_assert_cmpstr(network, ==, NULL);
 
        g_assert_finalize_object(client);
 }
@@ -467,7 +511,7 @@
        /* Check the changes. */
        g_assert_cmpint(mode_changes[0].mode, ==, 'm');
        g_assert_true(mode_changes[0].add);
-       g_assert_null(mode_changes[0].parameter);
+       g_assert_cmpstr(mode_changes[0].parameter, ==, NULL);
 
        g_assert_cmpint(mode_changes[1].mode, ==, 'b');
        g_assert_true(mode_changes[1].add);
@@ -501,11 +545,11 @@
 
        g_assert_cmpint(mode_changes[1].mode, ==, 'l');
        g_assert_false(mode_changes[1].add);
-       g_assert_null(mode_changes[1].parameter);
+       g_assert_cmpstr(mode_changes[1].parameter, ==, NULL);
 
        g_assert_cmpint(mode_changes[2].mode, ==, 'i');
        g_assert_true(mode_changes[2].add);
-       g_assert_null(mode_changes[2].parameter);
+       g_assert_cmpstr(mode_changes[2].parameter, ==, NULL);
 
        g_assert_finalize_object(client);
        g_free(mode_changes);
@@ -548,8 +592,10 @@
 
        g_test_add_func("/ibis/client/properties", test_ibis_client_properties);
 
-       g_test_add_func("/ibis/client/alt-nick",
-                       test_ibis_client_alt_nick);
+       g_test_add_func("/ibis/client/secondary-nick",
+                       test_ibis_client_secondary_nick);
+       g_test_add_func("/ibis/client/tertiary-nick",
+                       test_ibis_client_tertiary_nick);
 
        g_test_add_func("/ibis/client/realname/null",
                        test_ibis_client_realname_null);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/tests/test_features.c 
new/ibis-0.15.0/ibis/tests/test_features.c
--- old/ibis-0.14.0/ibis/tests/test_features.c  2025-05-01 01:18:52.000000000 
+0200
+++ new/ibis-0.15.0/ibis/tests/test_features.c  2025-12-30 09:48:39.000000000 
+0100
@@ -528,7 +528,7 @@
 
        g_test_add_func("/ibis/features/parse/fail", 
test_ibis_features_parse_fail);
        g_test_add_func("/ibis/features/parse/all", 
test_ibis_features_parse_all);
-       g_test_add_func("/ibis/featuers/parse/multiple",
+       g_test_add_func("/ibis/features/parse/multiple",
                        test_ibis_features_parse_multiple);
        g_test_add_func("/ibis/features/parse/unknown", 
test_ibis_features_parse_unknown);
        g_test_add_func("/ibis/features/parse/none", 
test_ibis_features_no_parse);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis/tests/test_formatting.c 
new/ibis-0.15.0/ibis/tests/test_formatting.c
--- old/ibis-0.14.0/ibis/tests/test_formatting.c        2025-05-01 
01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis/tests/test_formatting.c        2025-12-30 
09:48:39.000000000 +0100
@@ -56,7 +56,7 @@
 
 static void
 test_ibis_formatting_strip_color_full(void) {
-       test_ibis_formatting_strip("\0033,9wee", "wee");
+       test_ibis_formatting_strip("\0033,9whee", "whee");
 }
 
 static void
@@ -222,15 +222,15 @@
 
        attr = pango_attr_foreground_new(0x0000, 0x9393, 0x0000);
        attr->start_index = 0;
-       attr->end_index = 3;
+       attr->end_index = 4;
        pango_attr_list_insert(attrs, attr);
 
        attr = pango_attr_background_new(0x0000, 0xfcfc, 0x0000);
        attr->start_index = 0;
-       attr->end_index = 3;
+       attr->end_index = 4;
        pango_attr_list_insert(attrs, attr);
 
-       test_ibis_formatting_parse("\0033,9wee", "wee", attrs);
+       test_ibis_formatting_parse("\0033,9whee", "whee", attrs);
 }
 
 static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/ibis-cli/ibiscli.c 
new/ibis-0.15.0/ibis-cli/ibiscli.c
--- old/ibis-0.14.0/ibis-cli/ibiscli.c  2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/ibis-cli/ibiscli.c  2025-12-30 09:48:39.000000000 +0100
@@ -35,9 +35,9 @@
 /******************************************************************************
  * Command line options
  *****************************************************************************/
-static char *alt_nick = NULL;
 static char *join_channels = NULL;
-static char *nick = NULL;
+static char *primary_nick = NULL;
+static char *secondary_nick = NULL;
 static char *server = NULL;
 static int port = 6667;
 static char *password = NULL;
@@ -54,7 +54,7 @@
                .long_name = "alt-nick",
                .short_name = 'a',
                .arg = G_OPTION_ARG_STRING,
-               .arg_data = &alt_nick,
+               .arg_data = &secondary_nick,
                .description = N_("An alternate nickname to use."),
                .arg_description = N_("NICK"),
        }, {
@@ -68,7 +68,7 @@
                .long_name = "nick",
                .short_name = 'n',
                .arg = G_OPTION_ARG_STRING,
-               .arg_data = &nick,
+               .arg_data = &primary_nick,
                .description = N_("The nickname to use."),
                .arg_description = N_("NICK"),
        }, {
@@ -164,11 +164,11 @@
        /* Hold the application so we stick around. */
        g_application_hold(application);
 
-       if(!ibis_str_is_empty(nick)) {
-               ibis_client_set_nick(client, nick);
+       if(!ibis_str_is_empty(primary_nick)) {
+               ibis_client_set_primary_nick(client, primary_nick);
        }
 
-       ibis_client_set_alt_nick(client, alt_nick);
+       ibis_client_set_secondary_nick(client, secondary_nick);
 
        if(require_sasl) {
                HaslContext *hasl_context = hasl_context_new();
@@ -354,13 +354,13 @@
        }
        g_clear_object(&client);
 
-       g_clear_pointer(&alt_nick, g_free);
        g_clear_pointer(&join_channels, g_free);
-       g_clear_pointer(&nick, g_free);
        g_clear_pointer(&password, g_free);
+       g_clear_pointer(&primary_nick, g_free);
        g_clear_pointer(&sasl_mechanisms, g_free);
        g_clear_pointer(&sasl_password, g_free);
        g_clear_pointer(&sasl_username, g_free);
+       g_clear_pointer(&secondary_nick, g_free);
        g_clear_pointer(&server, g_free);
        g_clear_pointer(&startup_commands, g_strfreev);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/meson.build new/ibis-0.15.0/meson.build
--- old/ibis-0.14.0/meson.build 2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/meson.build 2025-12-30 09:48:39.000000000 +0100
@@ -1,8 +1,8 @@
 project('ibis', 'C',
   default_options : ['c_std=c17', 'warning_level=2'],
   license : 'LGPL-2.1-or-later',
-  meson_version : '>=1.0.0',
-  version : '0.14.0')
+  meson_version : '>=1.1.0',
+  version : '0.15.0')
 
 toplevel_inc = include_directories('.')
 
@@ -66,6 +66,16 @@
 pango_dep = dependency('pango', version : '>=1.54.0')
 
 ###############################################################################
+# codespell
+###############################################################################
+codespell = find_program('codespell', required: false)
+if codespell.found()
+  test('codespell',
+    codespell,
+    workdir : meson.project_source_root())
+endif
+
+###############################################################################
 # Internationalization
 ###############################################################################
 GETTEXT_PACKAGE = 'ibis'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/meson.options 
new/ibis-0.15.0/meson.options
--- old/ibis-0.14.0/meson.options       1970-01-01 01:00:00.000000000 +0100
+++ new/ibis-0.15.0/meson.options       2025-12-30 09:48:39.000000000 +0100
@@ -0,0 +1,17 @@
+option(
+  'doc',
+  type : 'boolean', value : true, yield : true,
+  description : 'build documentation with gi-docgen'
+)
+
+option(
+  'introspection',
+  type : 'boolean', value : true, yield : true,
+  description : 'Whether or not to build a GObject Introspection type library'
+)
+
+option(
+  'nls',
+  type : 'boolean', value : true, yield : true,
+  description : 'Install translation files'
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibis-0.14.0/meson_options.txt 
new/ibis-0.15.0/meson_options.txt
--- old/ibis-0.14.0/meson_options.txt   2025-05-01 01:18:52.000000000 +0200
+++ new/ibis-0.15.0/meson_options.txt   1970-01-01 01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-option(
-  'doc',
-  type : 'boolean', value : true, yield : true,
-  description : 'build documentation with gi-docgen'
-)
-
-option(
-  'introspection',
-  type : 'boolean', value : true, yield : true,
-  description : 'Whether or not to build a GObject Introspection type library'
-)
-
-option(
-  'nls',
-  type : 'boolean', value : true, yield : true,
-  description : 'Install translation files'
-)

Reply via email to