From ba9b681d0f530c388e8ba15e7e5bece80b9e1142 Mon Sep 17 00:00:00 2001
From: Philip Withnall <philip.withnall@collabora.co.uk>
Date: Wed, 29 Jun 2016 12:57:07 +0100
Subject: [PATCH] Release 0.4.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

• Replace UNRELEASED with 0.4.0 in documentation
 • Update symbols files to include all 0.4.0 symbols
 • Bump library SONAME, rename packages accordingly
 • Update NEWS

Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Signed-off-by: Philip Withnall <philip.withnall@collabora.co.uk>
Differential Revision: https://phabricator.apertis.org/D3534
---
 NEWS                                          | 25 +++++++++++++++++++
 configure.ac                                  |  6 ++---
 daemon/aggregate-zone.c                       |  2 +-
 daemon/peer-manager.c                         |  6 ++---
 debian/changelog                              |  7 ++++++
 debian/control                                | 16 ++++++------
 debian/libcroesor-0-3.install                 |  2 --
 debian/libcroesor-0-4.install                 |  2 ++
 ...sor-0-3.symbols => libcroesor-0-4.symbols} |  6 ++++-
 debian/librhosydd-0-3.install                 |  2 --
 debian/librhosydd-0-4.install                 |  2 ++
 ...ydd-0-3.symbols => librhosydd-0-4.symbols} | 20 ++++++++-------
 libcroesor/backend-manager.c                  |  4 +--
 libcroesor/clock.h                            |  2 +-
 libcroesor/peer-manager.h                     |  4 +--
 libcroesor/static-vehicle.c                   |  2 +-
 libcroesor/subscription-manager.c             |  2 +-
 libinternal/arrays.c                          |  2 +-
 libinternal/timestamped-pointer.c             |  8 +++---
 libinternal/timestamped-pointer.h             |  2 +-
 librhosydd/attribute.c                        |  2 +-
 librhosydd/subscription.c                     |  2 +-
 librhosydd/utilities.c                        |  6 ++---
 librhosydd/vehicle.c                          | 12 ++++-----
 librhosydd/zone.c                             |  2 +-
 25 files changed, 92 insertions(+), 54 deletions(-)
 delete mode 100644 debian/libcroesor-0-3.install
 create mode 100644 debian/libcroesor-0-4.install
 rename debian/{libcroesor-0-3.symbols => libcroesor-0-4.symbols} (86%)
 delete mode 100644 debian/librhosydd-0-3.install
 create mode 100644 debian/librhosydd-0-4.install
 rename debian/{librhosydd-0-3.symbols => librhosydd-0-4.symbols} (86%)

diff --git a/NEWS b/NEWS
index 092a055..4f597a6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,28 @@
+Overview of changes from Rhosydd 0.3.0 to Rhosydd 0.4.0
+=======================================================
+
+Major changes:
+ • Add the current time to each RsdVehicle getter; tidy up clock domain handling
+ • Remove AppArmor rules allowing backends to talk to polkit
+ • Use unicast rather than broadcast signalling from the daemon to clients
+ • Various memory leak fixes
+
+API changes:
+ • Add CsrBackendManager
+ • Convert CsrPeerManager into an interface, CsrPeerManagerInterface
+ • Drop csr_peer_manager_new_[async|finish]()
+ • Add timestamp parameters to:
+  - most functions in librhosydd/utilities.h
+  - most of the D-Bus Vehicle1 API
+  - RsdVehicle::attributes-[metadata-]changed
+  - most RsdVehicle methods
+ • Add rsd_zone_is_descendant()
+ • Add CsrClockFunc, csr_static_vehicle_set_clock_func()
+ • Add csr_subscription_manager_get_peers_for_subscriptions()
+ • Drop parameters from rsd_subscription_new_wildcard()
+ • Add rsd_attribute_clear()
+
+
 Overview of changes from Rhosydd 0.2.0 to Rhosydd 0.3.0
 =======================================================
 
diff --git a/configure.ac b/configure.ac
index 3258c4f..015f5be 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ(2.65)
 
 # Release version
 m4_define([rsd_version_major],[0])
-m4_define([rsd_version_minor],[3])
+m4_define([rsd_version_minor],[4])
 m4_define([rsd_version_micro],[0])
 
 # API version
@@ -41,7 +41,7 @@ AC_PROG_LN_S
 #     increment age.
 #  4. If any interfaces have been removed or changed since the last public
 #     release, then set age to 0.
-AC_SUBST([RSD_LT_VERSION],[3:0:0])
+AC_SUBST([RSD_LT_VERSION],[4:0:0])
 
 AC_SUBST([RSD_VERSION_MAJOR],rsd_version_major)
 AC_SUBST([RSD_VERSION_MINOR],rsd_version_minor)
@@ -52,7 +52,7 @@ AC_SUBST([RSD_API_VERSION],rsd_api_version)
 # long as they’re both in the same tarball. libcroesor’s LT and API versions
 # remain independent, however. Crucially, CSR_LT_VERSION must be modified
 # independently of RSD_LT_VERSION.
-AC_SUBST([CSR_LT_VERSION],[3:0:0])
+AC_SUBST([CSR_LT_VERSION],[4:0:0])
 
 AC_SUBST([CSR_VERSION_MAJOR],rsd_version_major)
 AC_SUBST([CSR_VERSION_MINOR],rsd_version_minor)
diff --git a/daemon/aggregate-zone.c b/daemon/aggregate-zone.c
index 969b928..652fd0f 100644
--- a/daemon/aggregate-zone.c
+++ b/daemon/aggregate-zone.c
@@ -631,7 +631,7 @@ vdd_aggregate_zone_clear_attributes (VddAggregateZone *self)
  *
  * Add a attribute to the #VddAggregateZone.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 vdd_aggregate_zone_add_attribute (VddAggregateZone *self,
diff --git a/daemon/peer-manager.c b/daemon/peer-manager.c
index 0af2798..4d68447 100644
--- a/daemon/peer-manager.c
+++ b/daemon/peer-manager.c
@@ -95,7 +95,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (PeerInfo, peer_info_free)
  * information about them and allowing polkit authorisation checks against them
  * while avoiding time-of-check-to-time-of-use vulnerabilities.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 struct _VddPeerManager
 {
@@ -311,7 +311,7 @@ authority_changed_cb (PolkitAuthority *authority,
  * instantiation must be finished (or the error returned) by calling
  * vdd_peer_manager_new_finish().
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 vdd_peer_manager_new_async (GCancellable        *cancellable,
@@ -332,7 +332,7 @@ vdd_peer_manager_new_async (GCancellable        *cancellable,
  * Finish initialising a #VddPeerManager. See vdd_peer_manager_new_async().
  *
  * Returns: (transfer full): initialised #VddPeerManager, or %NULL on error
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 VddPeerManager *
 vdd_peer_manager_new_finish (GAsyncResult    *result,
diff --git a/debian/changelog b/debian/changelog
index c99b293..d7897e1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+rhosydd (0.4.0-0co1) 16.06; urgency=medium
+
+  [ Philip Withnall ]
+  * (many changes, please see version control system)
+
+ -- Philip Withnall <philip.withnall@collabora.co.uk>  Wed, 29 Jun 2016 12:44:00 +0100
+
 rhosydd (0.3.0-0co1) 16.06; urgency=medium
 
   [ Philip Withnall ]
diff --git a/debian/control b/debian/control
index 3f68b1d..3463766 100644
--- a/debian/control
+++ b/debian/control
@@ -49,7 +49,7 @@ Description: Sensors and actuators API - GObject-Introspection bindings
  This package contains a machine-readable API description for the shared
  library for use by general client applications. It is part of the SDK-API.
 
-Package: libcroesor-0-3
+Package: libcroesor-0-4
 Architecture: any
 Multi-arch: same
 Depends:
@@ -62,7 +62,7 @@ Description: Sensors and actuators API - shared library for backends
  actuator backends. It is not part of the SDK-API and should not be
  used by applications.
 
-Package: librhosydd-0-3
+Package: librhosydd-0-4
 Architecture: any
 Multi-arch: same
 Depends:
@@ -80,7 +80,7 @@ Architecture: any
 Multi-arch: same
 Depends:
  gir1.2-croesor-0 (= ${binary:Version}),
- libcroesor-0-3 (= ${binary:Version}),
+ libcroesor-0-4 (= ${binary:Version}),
  ${misc:Depends},
  ${shlibs:Depends},
 Suggests:
@@ -108,7 +108,7 @@ Package: libcroesor-0-tests
 Section: misc
 Architecture: any
 Depends:
- libcroesor-0-3 (= ${binary:Version}),
+ libcroesor-0-4 (= ${binary:Version}),
  ${misc:Depends},
  ${shlibs:Depends},
 Description: Sensors and actuators API - tests
@@ -123,7 +123,7 @@ Architecture: any
 Multi-arch: same
 Depends:
  gir1.2-rhosydd-0 (= ${binary:Version}),
- librhosydd-0-3 (= ${binary:Version}),
+ librhosydd-0-4 (= ${binary:Version}),
  ${misc:Depends},
  ${shlibs:Depends},
 Suggests:
@@ -150,7 +150,7 @@ Package: librhosydd-0-tests
 Section: misc
 Architecture: any
 Depends:
- librhosydd-0-3 (= ${binary:Version}),
+ librhosydd-0-4 (= ${binary:Version}),
  ${misc:Depends},
  ${shlibs:Depends},
 Description: Sensors and actuators API - tests
@@ -179,8 +179,8 @@ Priority: extra
 Architecture: any
 Multi-Arch: same
 Depends:
- libcroesor-0-3 (= ${binary:Version}),
- librhosydd-0-3 (= ${binary:Version}),
+ libcroesor-0-4 (= ${binary:Version}),
+ librhosydd-0-4 (= ${binary:Version}),
  ${misc:Depends},
 Description: Debugging symbols for the Rhosydd service
  Rhosydd mediates access to vehicle sensors and actuators.
diff --git a/debian/libcroesor-0-3.install b/debian/libcroesor-0-3.install
deleted file mode 100644
index 7822ef0..0000000
--- a/debian/libcroesor-0-3.install
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/*/libcroesor-0.so.3
-usr/lib/*/libcroesor-0.so.3.*
diff --git a/debian/libcroesor-0-4.install b/debian/libcroesor-0-4.install
new file mode 100644
index 0000000..aef310f
--- /dev/null
+++ b/debian/libcroesor-0-4.install
@@ -0,0 +1,2 @@
+usr/lib/*/libcroesor-0.so.4
+usr/lib/*/libcroesor-0.so.4.*
diff --git a/debian/libcroesor-0-3.symbols b/debian/libcroesor-0-4.symbols
similarity index 86%
rename from debian/libcroesor-0-3.symbols
rename to debian/libcroesor-0-4.symbols
index b70359a..84332c0 100644
--- a/debian/libcroesor-0-3.symbols
+++ b/debian/libcroesor-0-4.symbols
@@ -1,8 +1,10 @@
-libcroesor-0.so.3 libcroesor-0-3 #MINVER#
+libcroesor-0.so.4 libcroesor-0-4 #MINVER#
 * Build-Depends-Package: libcroesor-0-dev
  csr_backend_error_quark@Base 0.2.0
  csr_backend_get_type@Base 0.2.0
  csr_backend_get_vehicle_manager@Base 0.2.0
+ csr_backend_manager_get_type@Base 0.4.0
+ csr_backend_manager_new@Base 0.4.0
  csr_backend_new@Base 0.2.0
  csr_peer_manager_check_authorization_async@Base 0.2.0
  csr_peer_manager_check_authorization_finish@Base 0.2.0
@@ -18,6 +20,8 @@ libcroesor-0.so.3 libcroesor-0-3 #MINVER#
  csr_service_run@Base 0.2.0
  csr_static_vehicle_get_type@Base 0.2.0
  csr_static_vehicle_new@Base 0.2.0
+ csr_static_vehicle_set_clock_func@Base 0.4.0
+ csr_subscription_manager_get_peers_for_subscriptions@Base 0.4.0
  csr_subscription_manager_get_subscriptions@Base 0.2.0
  csr_subscription_manager_get_type@Base 0.2.0
  csr_subscription_manager_new@Base 0.2.0
diff --git a/debian/librhosydd-0-3.install b/debian/librhosydd-0-3.install
deleted file mode 100644
index 19538d5..0000000
--- a/debian/librhosydd-0-3.install
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib/*/librhosydd-0.so.3
-usr/lib/*/librhosydd-0.so.3.*
diff --git a/debian/librhosydd-0-4.install b/debian/librhosydd-0-4.install
new file mode 100644
index 0000000..10069b9
--- /dev/null
+++ b/debian/librhosydd-0-4.install
@@ -0,0 +1,2 @@
+usr/lib/*/librhosydd-0.so.4
+usr/lib/*/librhosydd-0.so.4.*
diff --git a/debian/librhosydd-0-3.symbols b/debian/librhosydd-0-4.symbols
similarity index 86%
rename from debian/librhosydd-0-3.symbols
rename to debian/librhosydd-0-4.symbols
index ce7d4cd..21cc0fe 100644
--- a/debian/librhosydd-0-3.symbols
+++ b/debian/librhosydd-0-4.symbols
@@ -1,15 +1,16 @@
-librhosydd-0.so.3 librhosydd-0-3 #MINVER#
+librhosydd-0.so.4 librhosydd-0-4 #MINVER#
 * Build-Depends-Package: librhosydd-0-dev
  rsd_attribute_availability_is_valid@Base 0.2.0
+ rsd_attribute_clear@Base 0.4.0
  rsd_attribute_copy@Base 0.2.0
  rsd_attribute_flags_is_valid@Base 0.2.0
  rsd_attribute_free@Base 0.2.0
  rsd_attribute_get_type@Base 0.2.0
- rsd_attribute_info_array_from_variant@Base 0.2.0
+ rsd_attribute_info_array_from_variant@Base 0.4.0
  rsd_attribute_info_array_to_variant@Base 0.2.0
  rsd_attribute_info_copy@Base 0.2.0
  rsd_attribute_info_free@Base 0.2.0
- rsd_attribute_info_from_variant@Base 0.2.0
+ rsd_attribute_info_from_variant@Base 0.4.0
  rsd_attribute_info_get_type@Base 0.2.0
  rsd_attribute_info_new@Base 0.2.0
  rsd_attribute_init@Base 0.2.0
@@ -17,7 +18,7 @@ librhosydd-0.so.3 librhosydd-0-3 #MINVER#
  rsd_attribute_metadata_array_to_variant@Base 0.2.0
  rsd_attribute_metadata_copy@Base 0.2.0
  rsd_attribute_metadata_free@Base 0.2.0
- rsd_attribute_metadata_from_variant@Base 0.2.0
+ rsd_attribute_metadata_from_variant@Base 0.4.0
  rsd_attribute_metadata_get_type@Base 0.2.0
  rsd_attribute_metadata_init@Base 0.2.0
  rsd_attribute_metadata_new@Base 0.2.0
@@ -44,18 +45,18 @@ librhosydd-0.so.3 librhosydd-0-3 #MINVER#
  rsd_subscription_matches_period@Base 0.2.0
  rsd_subscription_new@Base 0.2.0
  rsd_subscription_new_aggregate@Base 0.2.0
- rsd_subscription_new_wildcard@Base 0.2.0
+ rsd_subscription_new_wildcard@Base 0.4.0
  rsd_subscription_notify@Base 0.2.0
  rsd_vehicle_error_quark@Base 0.2.0
  rsd_vehicle_get_all_attributes_async@Base 0.2.0
- rsd_vehicle_get_all_attributes_finish@Base 0.2.0
+ rsd_vehicle_get_all_attributes_finish@Base 0.4.0
  rsd_vehicle_get_all_metadata_async@Base 0.2.0
- rsd_vehicle_get_all_metadata_finish@Base 0.2.0
+ rsd_vehicle_get_all_metadata_finish@Base 0.4.0
  rsd_vehicle_get_attribute_async@Base 0.2.0
- rsd_vehicle_get_attribute_finish@Base 0.2.0
+ rsd_vehicle_get_attribute_finish@Base 0.4.0
  rsd_vehicle_get_id@Base 0.2.0
  rsd_vehicle_get_metadata_async@Base 0.2.0
- rsd_vehicle_get_metadata_finish@Base 0.2.0
+ rsd_vehicle_get_metadata_finish@Base 0.4.0
  rsd_vehicle_get_type@Base 0.1.0
  rsd_vehicle_get_zones@Base 0.2.0
  rsd_vehicle_id_is_valid@Base 0.2.0
@@ -76,6 +77,7 @@ librhosydd-0.so.3 librhosydd-0-3 #MINVER#
  rsd_zone_get_path@Base 0.2.0
  rsd_zone_get_tags@Base 0.2.0
  rsd_zone_get_type@Base 0.2.0
+ rsd_zone_is_descendant@Base 0.4.0
  rsd_zone_is_root@Base 0.2.0
  rsd_zone_path_build@Base 0.2.0
  rsd_zone_path_is_valid@Base 0.2.0
diff --git a/libcroesor/backend-manager.c b/libcroesor/backend-manager.c
index 2dc60d6..d1207b9 100644
--- a/libcroesor/backend-manager.c
+++ b/libcroesor/backend-manager.c
@@ -74,7 +74,7 @@ static void            clear_daemon                                   (CsrBacken
  * connect to the backend, for example. Support for this could be added in
  * future.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 struct _CsrBackendManager
 {
@@ -182,7 +182,7 @@ csr_backend_manager_set_property (GObject      *object,
  * Create a new #CsrBackendManager with no initial peer.
  *
  * Returns: (transfer full): a new #CsrBackendManager
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 CsrBackendManager *
 csr_backend_manager_new (void)
diff --git a/libcroesor/clock.h b/libcroesor/clock.h
index 2d50f4a..c64b29a 100644
--- a/libcroesor/clock.h
+++ b/libcroesor/clock.h
@@ -24,7 +24,7 @@ G_BEGIN_DECLS
  * whenever it is called. The value is always in microseconds, but the clock
  * domain is not prescribed.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 typedef RsdTimestampMicroseconds (*CsrClockFunc) (gpointer user_data);
 
diff --git a/libcroesor/peer-manager.h b/libcroesor/peer-manager.h
index fdf2037..b98c2a6 100644
--- a/libcroesor/peer-manager.h
+++ b/libcroesor/peer-manager.h
@@ -23,7 +23,7 @@ G_BEGIN_DECLS
  *
  * An object instance which implements #CsrPeerManagerInterface.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 #define CSR_TYPE_PEER_MANAGER csr_peer_manager_get_type ()
 G_DECLARE_INTERFACE (CsrPeerManager, csr_peer_manager, CSR,
@@ -43,7 +43,7 @@ G_DECLARE_INTERFACE (CsrPeerManager, csr_peer_manager, CSR,
  * allowing polkit authorisation checks against them while avoiding
  * time-of-check-to-time-of-use vulnerabilities.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 struct _CsrPeerManagerInterface
 {
diff --git a/libcroesor/static-vehicle.c b/libcroesor/static-vehicle.c
index 6ba3d66..b69f0b2 100644
--- a/libcroesor/static-vehicle.c
+++ b/libcroesor/static-vehicle.c
@@ -567,7 +567,7 @@ default_clock_cb (gpointer user_data)
  * @clock_func is set to %NULL (the default), g_get_monotonic_time() will be
  * used.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 csr_static_vehicle_set_clock_func (CsrStaticVehicle *self,
diff --git a/libcroesor/subscription-manager.c b/libcroesor/subscription-manager.c
index bc56897..9e472c4 100644
--- a/libcroesor/subscription-manager.c
+++ b/libcroesor/subscription-manager.c
@@ -401,7 +401,7 @@ csr_subscription_manager_get_subscriptions (CsrSubscriptionManager *self,
  * Returns: (transfer container) (element-type utf8): potentially empty array
  *    of D-Bus unique addresses for the peers who are subscribed to the listed
  *    attributes
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 GPtrArray *
 csr_subscription_manager_get_peers_for_subscriptions (CsrSubscriptionManager   *self,
diff --git a/libinternal/arrays.c b/libinternal/arrays.c
index 7ff2986..bcbe72c 100644
--- a/libinternal/arrays.c
+++ b/libinternal/arrays.c
@@ -24,7 +24,7 @@
  * place. The given @compare_func takes pointers to pointers in the array,
  * and has the same semantics as strcmp().
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 ptr_array_uniqueify (GPtrArray    *array,
diff --git a/libinternal/timestamped-pointer.c b/libinternal/timestamped-pointer.c
index 55e18e5..818645b 100644
--- a/libinternal/timestamped-pointer.c
+++ b/libinternal/timestamped-pointer.c
@@ -27,7 +27,7 @@
  * Create a new #TimestampedPointer which associates @timestamp with @data.
  *
  * Returns: (transfer full): a new #TimestampedPointer
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 TimestampedPointer *
 timestamped_pointer_new (gpointer                 data,
@@ -52,7 +52,7 @@ timestamped_pointer_new (gpointer                 data,
  * function passed at construction time on the data pointer, if both of them are
  * non-%NULL.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 timestamped_pointer_free (TimestampedPointer *data)
@@ -78,7 +78,7 @@ timestamped_pointer_free (TimestampedPointer *data)
  * Use in conjunction with timestamped_pointer_g_task_propagate() to return a
  * timestamp and pointer via a #GTask.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 timestamped_pointer_g_task_return (GTask                    *task,
@@ -106,7 +106,7 @@ timestamped_pointer_g_task_return (GTask                    *task,
  * separately.
  *
  * Returns: (transfer full): propagated pointer
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 gpointer
 timestamped_pointer_g_task_propagate (GTask                     *task,
diff --git a/libinternal/timestamped-pointer.h b/libinternal/timestamped-pointer.h
index c69103a..b50bdba 100644
--- a/libinternal/timestamped-pointer.h
+++ b/libinternal/timestamped-pointer.h
@@ -30,7 +30,7 @@ G_BEGIN_DECLS
  * timestamped_pointer_g_task_propagate() as a closure to bind vehicle
  * attributes and the timestamps they were retrieved.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 typedef struct
 {
diff --git a/librhosydd/attribute.c b/librhosydd/attribute.c
index 53683bd..8d8d17c 100644
--- a/librhosydd/attribute.c
+++ b/librhosydd/attribute.c
@@ -172,7 +172,7 @@ rsd_attribute_init (RsdAttribute       *attribute,
  * Clear the contents of an #RsdAttribute, but do not free the #RsdAttribute
  * itself.
  *
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 void
 rsd_attribute_clear (RsdAttribute *attribute)
diff --git a/librhosydd/subscription.c b/librhosydd/subscription.c
index d0dc37e..fde31fc 100644
--- a/librhosydd/subscription.c
+++ b/librhosydd/subscription.c
@@ -744,7 +744,7 @@ rsd_subscription_new_aggregate (GArray *subscriptions)
  * rsd_vehicle_update_subscriptions_async() for that.
  *
  * Returns: (transfer full): a new #RsdSubscription
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 RsdSubscription *
 rsd_subscription_new_wildcard (void)
diff --git a/librhosydd/utilities.c b/librhosydd/utilities.c
index 39501e9..384a8b9 100644
--- a/librhosydd/utilities.c
+++ b/librhosydd/utilities.c
@@ -216,7 +216,7 @@ validate_attribute_timestamp (RsdTimestampMicroseconds   last_updated,
  *
  * Returns: (element-type RsdAttributeInfo) (transfer container): attribute info
  *    array
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 GPtrArray *
 rsd_attribute_info_array_from_variant (GVariant                  *variant,
@@ -471,7 +471,7 @@ rsd_attribute_metadata_array_to_variant (GPtrArray *array)
  * any of its entries are invalid. The @variant must be in normal form.
  *
  * Returns: (transfer full): attribute info
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 RsdAttributeInfo *
 rsd_attribute_info_from_variant (GVariant                  *variant,
@@ -549,7 +549,7 @@ rsd_attribute_info_from_variant (GVariant                  *variant,
  * any of its entries are invalid. The @variant must be in normal form.
  *
  * Returns: (transfer full): attribute metadata
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 RsdAttributeMetadata *
 rsd_attribute_metadata_from_variant (GVariant                  *variant,
diff --git a/librhosydd/vehicle.c b/librhosydd/vehicle.c
index dc77133..06f11fb 100644
--- a/librhosydd/vehicle.c
+++ b/librhosydd/vehicle.c
@@ -118,7 +118,7 @@ rsd_vehicle_default_init (RsdVehicleInterface *iface)
    * should not rely on this behaviour; if a client uses an attribute, they must
    * subscribe to it.
    *
-   * Since: UNRELEASED
+   * Since: 0.4.0
    */
   g_signal_new ("attributes-changed", G_TYPE_FROM_INTERFACE (iface),
                 G_SIGNAL_RUN_LAST,
@@ -141,7 +141,7 @@ rsd_vehicle_default_init (RsdVehicleInterface *iface)
    * changed. For notifications of changes to the //values// of attributes, see
    * #RsdVehicle::attributes-changed.
    *
-   * Since: UNRELEASED
+   * Since: 0.4.0
    */
   g_signal_new ("attributes-metadata-changed", G_TYPE_FROM_INTERFACE (iface),
                 G_SIGNAL_RUN_LAST,
@@ -269,7 +269,7 @@ rsd_vehicle_get_attribute_async (RsdVehicle          *self,
  * See rsd_vehicle_get_attribute_async().
  *
  * Returns: (transfer full): attribute value and metadata
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 RsdAttributeInfo *
 rsd_vehicle_get_attribute_finish (RsdVehicle                *self,
@@ -370,7 +370,7 @@ rsd_vehicle_get_metadata_async (RsdVehicle          *self,
  * See rsd_vehicle_get_metadata_async().
  *
  * Returns: (transfer full): attribute metadata
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 RsdAttributeMetadata *
 rsd_vehicle_get_metadata_finish (RsdVehicle                *self,
@@ -546,7 +546,7 @@ rsd_vehicle_get_all_attributes_async (RsdVehicle          *self,
  *
  * Returns: (transfer container) (element-type RsdAttributeInfo): potentially
  *    empty array of attribute information
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 GPtrArray *
 rsd_vehicle_get_all_attributes_finish (RsdVehicle                *self,
@@ -628,7 +628,7 @@ rsd_vehicle_get_all_metadata_async (RsdVehicle          *self,
  * Returns: (transfer container) (element-type RsdAttributeMetadata):
  *    potentially empty array of attribute metadata information, where the
  *    #RsdAttributeMetadata is valid, but the #RsdAttribute is not
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 GPtrArray *
 rsd_vehicle_get_all_metadata_finish (RsdVehicle                *self,
diff --git a/librhosydd/zone.c b/librhosydd/zone.c
index 7058740..a917032 100644
--- a/librhosydd/zone.c
+++ b/librhosydd/zone.c
@@ -144,7 +144,7 @@ rsd_zone_is_root (RsdZone *self)
  * Check whether @self is equal to, or a descendant of, @ancestor.
  *
  * Returns: %TRUE if @self is a descedant of @ancestor, %FALSE otherwise
- * Since: UNRELEASED
+ * Since: 0.4.0
  */
 gboolean
 rsd_zone_is_descendant (RsdZone *self,
-- 
GitLab