lib: Coerce flags enums to GIR bitfields
authorDan Nicholson <nicholson@endlessm.com>
Thu, 30 Apr 2020 20:28:20 +0000 (14:28 -0600)
committerDan Nicholson <nicholson@endlessm.com>
Thu, 30 Apr 2020 21:13:31 +0000 (15:13 -0600)
The GI scanner decides if an `enum` is really a `bitfield` if it finds
any values that have left shifts. With an `enumeration`, the
introspecting language may error or convert to a different type if the
user tries to combine values. Change all Flags `enum`s to use
left-shifted values so that they're represented as `bitfield`s in the
GIR.

The primary bug here is that you can't combine `REFS_ONLY` and
`NO_PRUNE` when calling `OSTree.Repo.prune()` from an introspected
language.

This is an IABI break since the typelib will change from `enumeration`
to `bitfield`. `OstreeRepoImportFlags` is internal but the change is
included here to prepare for a subsequent name that would require bit
shifting to operate correctly as a flag.

src/libostree/ostree-gpg-verify-result.h
src/libostree/ostree-repo-private.h
src/libostree/ostree-repo.h

index 6f51ce8ac1ca06fd962c7ad445f84068158a4f4b..8f243fcd028bfbea040e88adc32416f594575fa6 100644 (file)
@@ -134,7 +134,7 @@ GVariant * ostree_gpg_verify_result_get_all (OstreeGpgVerifyResult *result,
  * for future variations.
  **/
 typedef enum {
-  OSTREE_GPG_SIGNATURE_FORMAT_DEFAULT = 0
+  OSTREE_GPG_SIGNATURE_FORMAT_DEFAULT = (0 << 0),
 } OstreeGpgSignatureFormatFlags;
 
 _OSTREE_PUBLIC
index a1c7b7b4db3a6022c9efc0c21dc46d1191b6a349..a744c069edc92517523037ec772aefd36c15898c 100644 (file)
@@ -374,9 +374,9 @@ _ostree_repo_verify_commit_internal (OstreeRepo    *self,
 #endif /* OSTREE_DISABLE_GPGME */
 
 typedef enum {
-  _OSTREE_REPO_IMPORT_FLAGS_NONE,
-  _OSTREE_REPO_IMPORT_FLAGS_TRUSTED,
-  _OSTREE_REPO_IMPORT_FLAGS_VERIFY_BAREUSERONLY,
+  _OSTREE_REPO_IMPORT_FLAGS_NONE = 0,
+  _OSTREE_REPO_IMPORT_FLAGS_TRUSTED = (1 << 0),
+  _OSTREE_REPO_IMPORT_FLAGS_VERIFY_BAREUSERONLY = (1 << 1),
 } OstreeRepoImportFlags;
 
 gboolean
index 1027ac772c48bf6d1a4dc65e9926386a97b210b7..e28af29cdfc809486577ed77a3df0a1207270eb2 100644 (file)
@@ -1174,9 +1174,9 @@ void ostree_repo_commit_traverse_iter_cleanup (void *p);
  * @OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY: Do not traverse individual commit objects, only follow refs
  */
 typedef enum {
-  OSTREE_REPO_PRUNE_FLAGS_NONE,
-  OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE,
-  OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY
+  OSTREE_REPO_PRUNE_FLAGS_NONE = 0,
+  OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE = (1 << 0),
+  OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY = (1 << 1),
 } OstreeRepoPruneFlags;
 
 _OSTREE_PUBLIC