11 * The remote_bundle_info struct contains information for a single bundle
12 * URI. This may be initialized simply by a given URI or might have
13 * additional metadata associated with it if the bundle was advertised by
16 struct remote_bundle_info
{
17 struct hashmap_entry ent
;
20 * The 'id' is a name given to the bundle for reference
21 * by other bundle infos.
26 * The 'uri' is the location of the remote bundle so
27 * it can be downloaded on-demand. This will be NULL
28 * if there was no table of contents.
33 * If the bundle has been downloaded, then 'file' is a
34 * filename storing its contents. Otherwise, 'file' is
40 * If the bundle has been unbundled successfully, then
41 * this boolean is true.
46 #define REMOTE_BUNDLE_INFO_INIT { 0 }
48 enum bundle_list_mode
{
55 * A bundle_list contains an unordered set of remote_bundle_info structs,
56 * as well as information about the bundle listing, such as version and
61 enum bundle_list_mode mode
;
62 struct hashmap bundles
;
65 void init_bundle_list(struct bundle_list
*list
);
66 void clear_bundle_list(struct bundle_list
*list
);
68 typedef int (*bundle_iterator
)(struct remote_bundle_info
*bundle
,
71 int for_all_bundles_in_list(struct bundle_list
*list
,
76 void print_bundle_list(FILE *fp
, struct bundle_list
*list
);
79 * A bundle URI may point to a bundle list where the key=value
80 * pairs are provided in config file format. This method is
81 * exposed publicly for testing purposes.
83 int bundle_uri_parse_config_format(const char *uri
,
85 struct bundle_list
*list
);
88 * Fetch data from the given 'uri' and unbundle the bundle data found
89 * based on that information.
91 * Returns non-zero if no bundle information is found at the given 'uri'.
93 int fetch_bundle_uri(struct repository
*r
, const char *uri
);
96 * General API for {transport,connect}.c etc.
100 * Parse a "key=value" packet line from the bundle-uri verb.
102 * Returns 0 on success and non-zero on error.
104 int bundle_uri_parse_line(struct bundle_list
*list
,