|  | ref iteration API | 
|  | ================= | 
|  |  | 
|  |  | 
|  | Iteration of refs is done by using an iterate function which will call a | 
|  | callback function for every ref. The callback function has this | 
|  | signature: | 
|  |  | 
|  | int handle_one_ref(const char *refname, const unsigned char *sha1, | 
|  | int flags, void *cb_data); | 
|  |  | 
|  | There are different kinds of iterate functions which all take a | 
|  | callback of this type. The callback is then called for each found ref | 
|  | until the callback returns nonzero. The returned value is then also | 
|  | returned by the iterate function. | 
|  |  | 
|  | Iteration functions | 
|  | ------------------- | 
|  |  | 
|  | * `head_ref()` just iterates the head ref. | 
|  |  | 
|  | * `for_each_ref()` iterates all refs. | 
|  |  | 
|  | * `for_each_ref_in()` iterates all refs which have a defined prefix and | 
|  | strips that prefix from the passed variable refname. | 
|  |  | 
|  | * `for_each_tag_ref()`, `for_each_branch_ref()`, `for_each_remote_ref()`, | 
|  | `for_each_replace_ref()` iterate refs from the respective area. | 
|  |  | 
|  | * `for_each_glob_ref()` iterates all refs that match the specified glob | 
|  | pattern. | 
|  |  | 
|  | * `for_each_glob_ref_in()` the previous and `for_each_ref_in()` combined. | 
|  |  | 
|  | * `head_ref_submodule()`, `for_each_ref_submodule()`, | 
|  | `for_each_ref_in_submodule()`, `for_each_tag_ref_submodule()`, | 
|  | `for_each_branch_ref_submodule()`, `for_each_remote_ref_submodule()` | 
|  | do the same as the functions descibed above but for a specified | 
|  | submodule. | 
|  |  | 
|  | * `for_each_rawref()` can be used to learn about broken ref and symref. | 
|  |  | 
|  | * `for_each_reflog()` iterates each reflog file. | 
|  |  | 
|  | Submodules | 
|  | ---------- | 
|  |  | 
|  | If you want to iterate the refs of a submodule you first need to add the | 
|  | submodules object database. You can do this by a code-snippet like | 
|  | this: | 
|  |  | 
|  | const char *path = "path/to/submodule" | 
|  | if (!add_submodule_odb(path)) | 
|  | die("Error submodule '%s' not populated.", path); | 
|  |  | 
|  | `add_submodule_odb()` will return an non-zero value on success. If you | 
|  | do not do this you will get an error for each ref that it does not point | 
|  | to a valid object. | 
|  |  | 
|  | Note: As a side-effect of this you can not safely assume that all | 
|  | objects you lookup are available in superproject. All submodule objects | 
|  | will be available the same way as the superprojects objects. | 
|  |  | 
|  | Example: | 
|  | -------- | 
|  |  | 
|  | ---- | 
|  | static int handle_remote_ref(const char *refname, | 
|  | const unsigned char *sha1, int flags, void *cb_data) | 
|  | { | 
|  | struct strbuf *output = cb_data; | 
|  | strbuf_addf(output, "%s\n", refname); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | ... | 
|  |  | 
|  | struct strbuf output = STRBUF_INIT; | 
|  | for_each_remote_ref(handle_remote_ref, &output); | 
|  | printf("%s", output.buf); | 
|  | ---- |