summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2015-02-02 11:36:29 +0000
committerRichard Hughes <richard@hughsie.com>2015-02-02 11:36:29 +0000
commit25b97c77b2d27f9c86d1a0bb6b731a327a1906a6 (patch)
tree589d7efb5515ccb682c3116d27410136b6f4baac
parentfbc9a6c77311a9aaf6cecdd44792d2d33e113e2d (diff)
downloadappstream-glib-25b97c77b2d27f9c86d1a0bb6b731a327a1906a6.tar.gz
Only open the package when required
This reduces the peak RSS by about 15% typically.
-rw-r--r--libappstream-builder/asb-context.c3
-rw-r--r--libappstream-builder/asb-package.c23
-rw-r--r--libappstream-builder/asb-package.h2
3 files changed, 22 insertions, 6 deletions
diff --git a/libappstream-builder/asb-context.c b/libappstream-builder/asb-context.c
index 69f920f..f6ea8b4 100644
--- a/libappstream-builder/asb-context.c
+++ b/libappstream-builder/asb-context.c
@@ -567,10 +567,9 @@ asb_context_add_filename (AsbContext *ctx, const gchar *filename, GError **error
filename);
return FALSE;
}
- if (!asb_package_open (pkg, filename, error))
- return FALSE;
/* add to array */
+ asb_package_set_filename (pkg, filename);
asb_context_add_package (ctx, pkg);
return TRUE;
}
diff --git a/libappstream-builder/asb-package.c b/libappstream-builder/asb-package.c
index 4d444ba..5c68d43 100644
--- a/libappstream-builder/asb-package.c
+++ b/libappstream-builder/asb-package.c
@@ -794,6 +794,25 @@ asb_package_class_init (AsbPackageClass *klass)
}
/**
+ * asb_package_set_filename:
+ * @pkg: A #AsbPackage
+ * @filename: package filename
+ *
+ * Sets the package filename.
+ *
+ * Since: 0.3.5
+ **/
+void
+asb_package_set_filename (AsbPackage *pkg, const gchar *filename)
+{
+ AsbPackagePrivate *priv = GET_PRIVATE (pkg);
+ g_free (priv->basename);
+ g_free (priv->filename);
+ priv->basename = g_path_get_basename (filename);
+ priv->filename = g_strdup (filename);
+}
+
+/**
* asb_package_open:
* @pkg: A #AsbPackage
* @filename: package filename
@@ -816,10 +835,6 @@ asb_package_open (AsbPackage *pkg, const gchar *filename, GError **error)
/* already open */
if (priv->is_open)
return TRUE;
-
- /* cache here */
- priv->filename = g_strdup (filename);
- priv->basename = g_path_get_basename (filename);
priv->is_open = TRUE;
/* call distro-specific method */
diff --git a/libappstream-builder/asb-package.h b/libappstream-builder/asb-package.h
index b996baa..e424469 100644
--- a/libappstream-builder/asb-package.h
+++ b/libappstream-builder/asb-package.h
@@ -139,6 +139,8 @@ void asb_package_set_kind (AsbPackage *pkg,
AsbPackageKind kind);
void asb_package_set_name (AsbPackage *pkg,
const gchar *name);
+void asb_package_set_filename (AsbPackage *pkg,
+ const gchar *filename);
void asb_package_set_version (AsbPackage *pkg,
const gchar *version);
void asb_package_set_release (AsbPackage *pkg,