[gimp] app: only check gimp-release once.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: only check gimp-release once.
- Date: Wed, 8 Jun 2022 18:59:23 +0000 (UTC)
commit ec8fb00561d62cca4aded94e35d4e40bb35d7699
Author: Jehan <jehan girinstud io>
Date: Wed Jun 8 19:10:16 2022 +0200
app: only check gimp-release once.
Store the useful package information as static contents rather than
loading and parsing the file repeatedly.
app/gimp-version.c | 232 +++++++++++++++++++++++++++++------------------------
1 file changed, 128 insertions(+), 104 deletions(-)
---
diff --git a/app/gimp-version.c b/app/gimp-version.c
index e56149a487..6c42d55480 100644
--- a/app/gimp-version.c
+++ b/app/gimp-version.c
@@ -38,6 +38,102 @@
#include "gimp-version.h"
+static gchar * gimp_library_version (const gchar *package,
+ gint build_time_major,
+ gint build_time_minor,
+ gint build_time_micro,
+ gint run_time_major,
+ gint run_time_minor,
+ gint run_time_micro,
+ gboolean localized);
+static gchar * gimp_library_versions (gboolean localized);
+static void gimp_version_get_release_info (gint *package_revision,
+ gboolean *package_check_update);
+
+void
+gimp_version_show (gboolean be_verbose)
+{
+ gchar *version = gimp_version (be_verbose, TRUE);
+
+ g_print ("%s", version);
+
+ g_free (version);
+}
+
+gchar *
+gimp_version (gboolean be_verbose,
+ gboolean localized)
+{
+ gchar *version;
+ gchar *temp;
+
+ version = g_strdup_printf (localized ? _("%s version %s") : "%s version %s",
+ GIMP_NAME, GIMP_VERSION);;
+ temp = g_strconcat (version, "\n", NULL);
+ g_free (version);
+ version = temp;
+
+ if (be_verbose)
+ {
+ gchar *verbose_info;
+ gchar *lib_versions;
+ gchar *flatpak_info = NULL;
+
+ lib_versions = gimp_library_versions (localized);
+ verbose_info = g_strdup_printf ("git-describe: %s\n"
+ "Build: %s rev %d for %s\n"
+ "# C compiler #\n%s\n"
+ "# Libraries #\n%s",
+ GIMP_GIT_VERSION,
+ GIMP_BUILD_ID,
+ gimp_version_get_revision (),
+ GIMP_BUILD_PLATFORM_FAMILY,
+ CC_VERSION,
+ lib_versions);
+ g_free (lib_versions);
+
+ /* This file should be available at root path in a flatpak
+ * environment. Just add its contents to the verbose output if it
+ * exists. Silently ignore otherwise.
+ */
+ if (g_file_get_contents ("/.flatpak-info", &flatpak_info, NULL, NULL))
+ {
+ temp = g_strdup_printf ("\n# Flatpak info #\n%s",
+ flatpak_info);
+ g_free (flatpak_info);
+ flatpak_info = temp;
+ }
+ temp = g_strconcat (version, verbose_info, flatpak_info, NULL);
+ g_free (version);
+ g_free (verbose_info);
+ g_free (flatpak_info);
+
+ version = temp;
+ }
+
+ return version;
+}
+
+gint
+gimp_version_get_revision (void)
+{
+ gint revision;
+
+ gimp_version_get_release_info (&revision, NULL);
+
+ return revision;
+}
+
+gboolean
+gimp_version_check_update (void)
+{
+ gboolean check_update;
+
+ gimp_version_get_release_info (NULL, &check_update);
+
+ return check_update;
+}
+
static gchar *
gimp_library_version (const gchar *package,
gint build_time_major,
@@ -193,119 +289,47 @@ gimp_library_versions (gboolean localized)
return lib_versions;
}
-void
-gimp_version_show (gboolean be_verbose)
-{
- gchar *version = gimp_version (be_verbose, TRUE);
-
- g_print ("%s", version);
-
- g_free (version);
-}
-
-gchar *
-gimp_version (gboolean be_verbose,
- gboolean localized)
+static void
+gimp_version_get_release_info (gint *package_revision,
+ gboolean *package_check_update)
{
- gchar *version;
- gchar *temp;
+ static gint revision = -1;
+ static gboolean check_update = FALSE;
- version = g_strdup_printf (localized ? _("%s version %s") : "%s version %s",
- GIMP_NAME, GIMP_VERSION);;
- temp = g_strconcat (version, "\n", NULL);
- g_free (version);
- version = temp;
-
- if (be_verbose)
+ if (revision == -1)
{
- gchar *verbose_info;
- gchar *lib_versions;
- gchar *flatpak_info = NULL;
+ GKeyFile *key_file;
+ gchar *gimp_release;
- lib_versions = gimp_library_versions (localized);
- verbose_info = g_strdup_printf ("git-describe: %s\n"
- "Build: %s rev %d for %s\n"
- "# C compiler #\n%s\n"
- "# Libraries #\n%s",
- GIMP_GIT_VERSION,
- GIMP_BUILD_ID,
- gimp_version_get_revision (),
- GIMP_BUILD_PLATFORM_FAMILY,
- CC_VERSION,
- lib_versions);
- g_free (lib_versions);
+ revision = 0;
+ key_file = g_key_file_new ();
- /* This file should be available at root path in a flatpak
- * environment. Just add its contents to the verbose output if it
- * exists. Silently ignore otherwise.
+ /* The gimp-release file is inspired by /etc/os-release and similar
+ * distribution files. Right now its main use is to number the package
+ * revision. This information is not a build variable because a new
+ * package version does not necessarily imply a rebuild (maybe just
+ * installed data or dependencies change).
*/
- if (g_file_get_contents ("/.flatpak-info", &flatpak_info, NULL, NULL))
+ gimp_release = g_build_filename (gimp_data_directory (), "gimp-release", NULL);
+ /* Absence of the file is not an error. Actually most third-party
+ * builds probably won't install such file.
+ */
+ if (g_key_file_load_from_file (key_file, gimp_release, G_KEY_FILE_NONE, NULL))
{
- temp = g_strdup_printf ("\n# Flatpak info #\n%s",
- flatpak_info);
- g_free (flatpak_info);
- flatpak_info = temp;
- }
- temp = g_strconcat (version, verbose_info, flatpak_info, NULL);
- g_free (version);
- g_free (verbose_info);
- g_free (flatpak_info);
-
- version = temp;
- }
-
- return version;
-}
-
-gint
-gimp_version_get_revision (void)
-{
- GKeyFile *key_file;
- gchar *gimp_release;
- gint revision = 0;
-
- key_file = g_key_file_new ();
-
- /* The gimp-release file is inspired by /etc/os-release and similar
- * distribution files. Right now its main use is to number the package
- * revision. This information is not a build variable because a new
- * package version does not necessarily imply a rebuild (maybe just
- * installed data or dependencies change).
- */
- gimp_release = g_build_filename (gimp_data_directory (), "gimp-release", NULL);
- /* Absence of the file is not an error. Actually most third-party
- * builds probably won't install such file.
- */
- if (g_key_file_load_from_file (key_file, gimp_release, G_KEY_FILE_NONE, NULL))
- {
- if (g_key_file_has_key (key_file, "package", "revision", NULL))
- revision = g_key_file_get_integer (key_file, "package", "revision", NULL);
- }
- g_key_file_free (key_file);
- g_free (gimp_release);
+ check_update = TRUE;
- return revision;
-}
+ if (g_key_file_has_key (key_file, "package", "revision", NULL))
+ revision = g_key_file_get_integer (key_file, "package", "revision", NULL);
-gboolean
-gimp_version_check_update (void)
-{
- GKeyFile *key_file;
- gchar *gimp_release;
- gboolean check_update = FALSE;
-
- key_file = g_key_file_new ();
-
- gimp_release = g_build_filename (gimp_data_directory (), "gimp-release", NULL);
- if (g_key_file_load_from_file (key_file, gimp_release, G_KEY_FILE_NONE, NULL))
- {
- check_update = TRUE;
-
- if (g_key_file_has_key (key_file, "package", "check-update", NULL))
- check_update = g_key_file_get_boolean (key_file, "package", "check-update", NULL);
+ if (g_key_file_has_key (key_file, "package", "check-update", NULL))
+ check_update = g_key_file_get_boolean (key_file, "package", "check-update", NULL);
+ }
+ g_key_file_free (key_file);
+ g_free (gimp_release);
}
- g_key_file_free (key_file);
- g_free (gimp_release);
- return check_update;
+ if (package_revision)
+ *package_revision = revision;
+ if (package_check_update)
+ *package_check_update = check_update;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]