コード例 #1
0
static gboolean
as_app_validate_releases (AsApp *app, AsAppValidateHelper *helper, GError **error)
{
	GPtrArray *releases;
	AsFormat *format;
	gboolean require_release = FALSE;

	/* only for AppData */
	format = as_app_get_format_default (app);
	if (as_format_get_kind (format) != AS_FORMAT_KIND_APPDATA &&
	    as_format_get_kind (format) != AS_FORMAT_KIND_METAINFO)
		return TRUE;

	/* make the requirements more strict */
	if ((helper->flags & AS_APP_VALIDATE_FLAG_RELAX) == 0) {
		/* only for desktop and console apps */
		if (as_app_get_kind (app) == AS_APP_KIND_DESKTOP ||
		    as_app_get_kind (app) == AS_APP_KIND_CONSOLE) {
			require_release = TRUE;
		}
	}

	/* require releases */
	releases = as_app_get_releases (app);
	if (require_release && releases->len == 0) {
		ai_app_validate_add (helper,
				     AS_PROBLEM_KIND_TAG_MISSING,
				     "<release> required");
		return TRUE;
	}
	for (guint i = 0; i < releases->len; i++) {
		AsRelease *release = g_ptr_array_index (releases, i);
		if (!as_app_validate_release (app, release, helper, error))
			return FALSE;
	}

	/* check the version numbers go down each time */
	if (releases->len > 1) {
		AsRelease *release_old = g_ptr_array_index (releases, 0);
		for (guint i = 1; i < releases->len; i++) {
			AsRelease *release = g_ptr_array_index (releases, i);
			const gchar *version = as_release_get_version (release);
			const gchar *version_old = as_release_get_version (release_old);
			if (version == NULL || version_old == NULL)
				continue;
			if (as_utils_vercmp_full (version, version_old, AS_VERSION_COMPARE_FLAG_NONE) > 0) {
				ai_app_validate_add (helper,
						     AS_PROBLEM_KIND_TAG_INVALID,
						     "<release> versions are not in order "
						     "[%s before %s]",
						     version_old, version);
			}
			release_old = release;
		}
	}

	return TRUE;
}
コード例 #2
0
/**
 * as_app_validate_releases:
 **/
static gboolean
as_app_validate_releases (AsApp *app, AsAppValidateHelper *helper, GError **error)
{
	AsRelease *release;
	GPtrArray *releases;
	guint i;

	/* only for AppData */
	if (as_app_get_source_kind (app) != AS_APP_SOURCE_KIND_APPDATA)
		return TRUE;

	releases = as_app_get_releases (app);
	if (releases->len > 10) {
		ai_app_validate_add (helper->probs,
				     AS_PROBLEM_KIND_STYLE_INCORRECT,
				     "Too many <release> tags");
	}
	for (i = 0; i < releases->len; i++) {
		release = g_ptr_array_index (releases, i);
		if (!as_app_validate_release (release, helper, error))
			return FALSE;
	}
	return TRUE;
}