Skip to content

Instantly share code, notes, and snippets.

@rcoup
Created June 27, 2019 12:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rcoup/79e2d12904cf7b532e1b40b013b76348 to your computer and use it in GitHub Desktop.
Save rcoup/79e2d12904cf7b532e1b40b013b76348 to your computer and use it in GitHub Desktop.
cflow trace for git_revparse_single()
$ cflow -T --brief --main=git_revparse_single refs.c revparse.c
+-git_revparse_single() <int git_revparse_single (git_object **out, git_repository *repo, const char *spec) at revparse.c:854>
+-git_revparse_ext() <int git_revparse_ext (git_object **object_out, git_reference **reference_out, git_repository *repo, const char *spec) at revparse.c:828>
| +-revparse__ext() <int revparse__ext (git_object **object_out, git_reference **reference_out, size_t *identifier_len_out, git_repository *repo, const char *spec) at revparse.c:663>
| | +-assert()
| | +-ensure_base_rev_loaded() <int ensure_base_rev_loaded (git_object **object, git_reference **reference, const char *spec, size_t identifier_len, git_repository *repo, bool allow_empty_identifier) at revparse.c:610>
| | | +-object_from_reference() <int object_from_reference (git_object **object, git_reference *reference) at revparse.c:596>
| | | | +-git_reference_resolve() <int git_reference_resolve (git_reference **ref_out, const git_reference *ref) at refs.c:723>
| | | | | +-git_reference_type() <git_reference_t git_reference_type (const git_reference *ref) at refs.c:357>
| | | | | | \-assert()
| | | | | +-git_reference_lookup() <int git_reference_lookup (git_reference **ref_out, git_repository *repo, const char *name) at refs.c:162>
| | | | | | \-git_reference_lookup_resolved() <int git_reference_lookup_resolved (git_reference **ref_out, git_repository *repo, const char *name, int max_nesting) at refs.c:201>
| | | | | | +-assert()
| | | | | | +-reference_normalize_for_repo() <int reference_normalize_for_repo (git_refname_t out, git_repository *repo, const char *name, bool validate) at refs.c:182>
| | | | | | | +-git_repository__cvar()
| | | | | | | \-git_reference_normalize_name() <int git_reference_normalize_name (char *buffer_out, size_t buffer_size, const char *name, unsigned int flags) at refs.c:1090>
| | | | | | | +-git_reference__normalize_name() <int git_reference__normalize_name (git_buf *buf, const char *name, unsigned int flags) at refs.c:964>
| | | | | | | | +-assert()
| | | | | | | | +-git_buf_clear()
| | | | | | | | +-strlen()
| | | | | | | | +-git_path_iconv_init_precompose()
| | | | | | | | +-git_path_iconv()
| | | | | | | | +-git_buf_sets()
| | | | | | | | +-git_buf_oom()
| | | | | | | | +-ensure_segment_validity() <int ensure_segment_validity (const char *name) at refs.c:907>
| | | | | | | | | +-strlen()
| | | | | | | | | +-is_valid_ref_char() <int is_valid_ref_char (char ch) at refs.c:888>
| | | | | | | | | \-memcmp()
| | | | | | | | +-git_buf_len()
| | | | | | | | +-git_buf_joinpath()
| | | | | | | | +-git_buf_cstr()
| | | | | | | | +-git_buf_truncate()
| | | | | | | | +-is_all_caps_and_underscore() <bool is_all_caps_and_underscore (const char *name, size_t len) at refs.c:943>
| | | | | | | | | \-assert()
| | | | | | | | +-strcmp()
| | | | | | | | +-strchr()
| | | | | | | | +-git_error_set()
| | | | | | | | +-git_buf_dispose()
| | | | | | | | \-git_path_iconv_clear()
| | | | | | | +-git_buf_len()
| | | | | | | +-git_error_set()
| | | | | | | +-git_buf_copy_cstr()
| | | | | | | \-git_buf_dispose()
| | | | | | +-git_repository_refdb__weakptr()
| | | | | | +-strncpy()
| | | | | | +-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124>
| | | | | | | +-git__free()
| | | | | | | \-GIT_REFCOUNT_DEC()
| | | | | | +-git_refdb_lookup()
| | | | | | \-git_error_set()
| | | | | +-git_reference_lookup_resolved() <int git_reference_lookup_resolved (git_reference **ref_out, git_repository *repo, const char *name, int max_nesting) at refs.c:201> [see 11]
| | | | | \-git_error_set()
| | | | +-git_object_lookup()
| | | | +-git_reference_target() <const git_oid *git_reference_target (const git_reference *ref) at refs.c:375>
| | | | | \-assert()
| | | | \-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
| | | +-git_buf_put()
| | | +-revparse_lookup_object() <int revparse_lookup_object (git_object **object_out, git_reference **reference_out, git_repository *repo, const char *spec) at revparse.c:88>
| | | | +-maybe_sha() <int maybe_sha (git_object **out, git_repository *repo, const char *spec) at revparse.c:28>
| | | | | +-strlen()
| | | | | \-maybe_sha_or_abbrev() <int maybe_sha_or_abbrev (git_object **out, git_repository *repo, const char *spec, size_t speclen) at revparse.c:18>
| | | | | +-git_oid_fromstrn()
| | | | | \-git_object_lookup_prefix()
| | | | +-git_reference_dwim() <int git_reference_dwim (git_reference **out, git_repository *repo, const char *refname) at refs.c:290>
| | | | | +-git_buf_puts()
| | | | | +-git_buf_clear()
| | | | | +-git_buf_printf()
| | | | | +-git_buf_cstr()
| | | | | +-git_reference_is_valid_name() <int git_reference_is_valid_name (const char *refname) at refs.c:1412>
| | | | | | \-git_reference__is_valid_name() <int git_reference__is_valid_name (const char *refname, unsigned int flags) at refs.c:1402>
| | | | | | +-git_reference__normalize_name() <int git_reference__normalize_name (git_buf *buf, const char *name, unsigned int flags) at refs.c:964> [see 16]
| | | | | | \-git_error_clear()
| | | | | +-git_reference_lookup_resolved() <int git_reference_lookup_resolved (git_reference **ref_out, git_repository *repo, const char *name, int max_nesting) at refs.c:201> [see 11]
| | | | | +-git_error_set()
| | | | | \-git_buf_dispose()
| | | | +-git_object_lookup()
| | | | +-git_reference_target() <const git_oid *git_reference_target (const git_reference *ref) at refs.c:375> [see 53]
| | | | +-strlen()
| | | | +-maybe_abbrev() <int maybe_abbrev (git_object **out, git_repository *repo, const char *spec) at revparse.c:38>
| | | | | +-strlen()
| | | | | \-maybe_sha_or_abbrev() <int maybe_sha_or_abbrev (git_object **out, git_repository *repo, const char *spec, size_t speclen) at revparse.c:18> [see 60]
| | | | +-maybe_describe() <int maybe_describe (git_object **out, git_repository *repo, const char *spec) at revparse.c:65>
| | | | | +-strstr()
| | | | | +-build_regex() <int build_regex (regex_t *regex, const char *pattern) at revparse.c:45>
| | | | | | +-git_error_set()
| | | | | | +-p_regcomp()
| | | | | | +-git_error_set_regex()
| | | | | | \-regfree()
| | | | | +-regexec()
| | | | | +-regfree()
| | | | | \-maybe_abbrev() <int maybe_abbrev (git_object **out, git_repository *repo, const char *spec) at revparse.c:38> [see 78]
| | | | \-git_error_set()
| | | +-git_buf_cstr()
| | | \-git_buf_dispose()
| | +-extract_curly_braces_content() <int extract_curly_braces_content (git_buf *buf, const char *spec, size_t *pos) at revparse.c:524>
| | | +-git_buf_clear()
| | | +-assert()
| | | \-git_buf_putc()
| | +-handle_caret_curly_syntax() <int handle_caret_curly_syntax (git_object **out, git_object *obj, const char *curly_braces_content) at revparse.c:506>
| | | +-dereference_to_non_tag() <int dereference_to_non_tag (git_object **out, git_object *obj) at revparse.c:375>
| | | | +-git_object_type()
| | | | +-git_tag_peel()
| | | | \-git_object_dup()
| | | +-handle_grep_syntax() <int handle_grep_syntax (git_object **out, git_repository *repo, const git_oid *spec_oid, const char *pattern) at revparse.c:477>
| | | | +-build_regex() <int build_regex (regex_t *regex, const char *pattern) at revparse.c:45> [see 83]
| | | | +-git_revwalk_new()
| | | | +-git_revwalk_sorting()
| | | | +-git_revwalk_push_glob()
| | | | +-git_revwalk_push()
| | | | +-walk_and_search() <int walk_and_search (git_object **out, git_revwalk *walk, regex_t *regex) at revparse.c:451>
| | | | | +-git_revwalk_next()
| | | | | +-git_object_lookup()
| | | | | +-git_revwalk_repository()
| | | | | +-regexec()
| | | | | +-git_commit_message()
| | | | | \-git_object_free()
| | | | +-regfree()
| | | | \-git_revwalk_free()
| | | +-git_object_owner()
| | | +-git_object_id()
| | | +-parse_obj_type() <git_object_t parse_obj_type (const char *str) at revparse.c:358>
| | | | \-strcmp()
| | | \-git_object_peel()
| | +-git_buf_cstr()
| | +-git_object_free()
| | +-extract_how_many() <int extract_how_many (int *n, const char *spec, size_t *pos) at revparse.c:565>
| | | +-assert()
| | | +-git__isdigit()
| | | +-git__strntol32()
| | | \-strlen()
| | +-handle_caret_parent_syntax() <int handle_caret_parent_syntax (git_object **out, git_object *obj, int n) at revparse.c:383>
| | | +-git_object_peel()
| | | +-git_commit_parent()
| | | \-git_object_free()
| | +-handle_linear_syntax() <int handle_linear_syntax (git_object **out, git_object *obj, int n) at revparse.c:403>
| | | +-git_object_peel()
| | | +-git_commit_nth_gen_ancestor()
| | | \-git_object_free()
| | +-extract_path() <int extract_path (git_buf *buf, const char *spec, size_t *pos) at revparse.c:549>
| | | +-git_buf_clear()
| | | +-assert()
| | | +-git_buf_puts()
| | | \-git_buf_len()
| | +-any_left_hand_identifier() <bool any_left_hand_identifier (git_object *object, git_reference *reference, size_t identifier_len) at revparse.c:641>
| | +-handle_colon_syntax() <int handle_colon_syntax (git_object **out, git_object *obj, const char *path) at revparse.c:418>
| | | +-git_object_peel()
| | | +-git_tree_entry_bypath()
| | | +-git_tree_entry_to_object()
| | | +-git_object_owner()
| | | +-git_tree_entry_free()
| | | \-git_object_free()
| | +-handle_grep_syntax() <int handle_grep_syntax (git_object **out, git_repository *repo, const git_oid *spec_oid, const char *pattern) at revparse.c:477> [see 103]
| | +-git_error_set()
| | +-ensure_base_rev_is_not_known_yet() <int ensure_base_rev_is_not_known_yet (git_object *object) at revparse.c:633>
| | +-handle_at_syntax() <int handle_at_syntax (git_object **out, git_reference **ref, const char *spec, size_t identifier_len, git_repository *repo, const char *curly_braces_content) at revparse.c:314>
| | | +-assert()
| | | +-git_buf_put()
| | | +-try_parse_numeric() <int try_parse_numeric (int *n, const char *curly_braces_content) at revparse.c:126>
| | | | +-git__strntol32()
| | | | \-strlen()
| | | +-retrieve_previously_checked_out_branch_or_revision() <int retrieve_previously_checked_out_branch_or_revision (git_object **out, git_reference **base_ref, git_repository *repo, const char *identifier, size_t position) at revparse.c:142>
| | | | +-build_regex() <int build_regex (regex_t *regex, const char *pattern) at revparse.c:45> [see 83]
| | | | +-git_reference_lookup() <int git_reference_lookup (git_reference **ref_out, git_repository *repo, const char *name) at refs.c:162> [see 10]
| | | | +-git_reflog_read()
| | | | +-git_reflog_entrycount()
| | | | +-git_reflog_entry_byindex()
| | | | +-git_reflog_entry_message()
| | | | +-regexec()
| | | | +-git_buf_put()
| | | | +-git_reference_dwim() <int git_reference_dwim (git_reference **out, git_repository *repo, const char *refname) at refs.c:290> [see 63]
| | | | +-git_buf_cstr()
| | | | +-maybe_abbrev() <int maybe_abbrev (git_object **out, git_repository *repo, const char *spec) at revparse.c:38> [see 78]
| | | | +-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
| | | | +-git_buf_dispose()
| | | | +-regfree()
| | | | \-git_reflog_free()
| | | +-git_buf_cstr()
| | | +-retrieve_revobject_from_reflog() <int retrieve_revobject_from_reflog (git_object **out, git_reference **base_ref, git_repository *repo, const char *identifier, size_t position) at revparse.c:257>
| | | | +-git_reference_dwim() <int git_reference_dwim (git_reference **out, git_repository *repo, const char *refname) at refs.c:290> [see 63]
| | | | +-git_object_lookup()
| | | | +-git_reference_target() <const git_oid *git_reference_target (const git_reference *ref) at refs.c:375> [see 53]
| | | | +-retrieve_oid_from_reflog() <int retrieve_oid_from_reflog (git_oid *oid, git_reference *ref, size_t identifier) at revparse.c:207>
| | | | | +-git_reflog_read()
| | | | | +-git_reference_owner() <git_repository *git_reference_owner (const git_reference *ref) at refs.c:369>
| | | | | | \-assert()
| | | | | +-git_reference_name() <const char *git_reference_name (const git_reference *ref) at refs.c:363>
| | | | | | \-assert()
| | | | | +-git_reflog_entrycount()
| | | | | +-git_reflog_entry_byindex()
| | | | | +-git_oid_cpy()
| | | | | +-git_reflog_entry_id_new()
| | | | | +-git_reflog_entry_committer()
| | | | | +-git_reflog_free()
| | | | | \-git_error_set()
| | | | \-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
| | | +-strcmp()
| | | +-retrieve_remote_tracking_reference() <int retrieve_remote_tracking_reference (git_reference **base_ref, const char *identifier, git_repository *repo) at revparse.c:286>
| | | | +-git_reference_dwim() <int git_reference_dwim (git_reference **out, git_repository *repo, const char *refname) at refs.c:290> [see 63]
| | | | +-git_reference_is_branch() <int git_reference_is_branch (const git_reference *ref) at refs.c:1303>
| | | | | +-assert()
| | | | | \-git_reference__is_branch() <int git_reference__is_branch (const char *ref_name) at refs.c:1298>
| | | | | \-git__prefixcmp()
| | | | +-git_branch_upstream()
| | | | \-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
| | | +-git__date_parse()
| | | \-git_buf_dispose()
| | +-ensure_left_hand_identifier_is_not_known_yet() <int ensure_left_hand_identifier_is_not_known_yet (git_object *object, git_reference *reference) at revparse.c:655>
| | | \-ensure_base_rev_is_not_known_yet() <int ensure_base_rev_is_not_known_yet (git_object *object) at revparse.c:633> [see 153]
| | +-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
| | \-git_buf_dispose()
| +-GIT_UNUSED()
| +-git_object_free()
| \-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
+-git_reference_free() <void git_reference_free (git_reference *reference) at refs.c:124> [see 45]
\-git_object_free()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment