Fix implementation of xa.noenumerate remote option
Currently the xa.noenumerate option on a remote is documented as causing the remote not to be used when presenting available apps/runtimes or when searching for dependencies. The idea is that the remote is only used for providing updates for things installed from it, and this functionality is used when creating an origin remote for something installed via a flatpakref file. However, the implementation of this in flatpak_dir_list_remote_refs() is buggy. It returns an empty set of refs even if something is both locally installed and available from the remote. This is because it is using hash table comparisons of FlatpkDecomposed objects (via flatpak_decomposed_hash()) which take into account both the ref (or refspec) and the collection ID, and the local refs' FlatpakDecomposed objects are created from a refspec whereas the remote refs' FlatpakDecomposed objects are created from a ref alone. We could fix this by having them both use refspecs, but it is better to use a collection-ref tuple for the following reasons: (1) Changing flatpak_dir_list_all_remote_refs() to use a refspec to create the FlatpakDecomposed objects would be a breaking change for the other users of that function. (2) Both the local and remote refs are from the same remote so we don't need to use the remote name to disambiguate them, even if no collection ID is configured. (3) The whole point of collection IDs is to make refs uniquely identifiable, so we're using them for the intended purpose. In addition to fixing this bug, this commit adds a unit test in testlibrary.c so it stays fixed. (cherry picked from commit 7f3556d92ca7af1eaabeaf893eefa2d970433368)
Loading
Please register or sign in to comment