diff options
author | Russell Belfer <rb@github.com> | 2014-04-29 15:05:58 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-05-02 09:21:33 -0700 |
commit | 9c8ed4999740e921ecc2966bbcd0dbcfc725f59a (patch) | |
tree | cf801e2026c9fca6b4e28bfc2c35e981d9ccea6e /src/diff.c | |
parent | 7a2e56a3f6115c3a145e4f73d0aa8bea6dded899 (diff) | |
download | libgit2-9c8ed4999740e921ecc2966bbcd0dbcfc725f59a.tar.gz |
Remove trace / add git_diff_perfdata struct + api
Diffstat (limited to 'src/diff.c')
-rw-r--r-- | src/diff.c | 76 |
1 files changed, 40 insertions, 36 deletions
diff --git a/src/diff.c b/src/diff.c index b34d15312..26e671dce 100644 --- a/src/diff.c +++ b/src/diff.c @@ -14,7 +14,6 @@ #include "index.h" #include "odb.h" #include "submodule.h" -#include "trace.h" #define DIFF_FLAG_IS_SET(DIFF,FLAG) (((DIFF)->opts.flags & (FLAG)) != 0) #define DIFF_FLAG_ISNT_SET(DIFF,FLAG) (((DIFF)->opts.flags & (FLAG)) == 0) @@ -555,7 +554,8 @@ int git_diff__oid_for_entry( if (!entry.mode) { struct stat st; - git_trace(GIT_TRACE_PERF, NULL, "stat"); + diff->perf.stat_calls++; + if (p_stat(full_path.ptr, &st) < 0) { error = git_path_set_error(errno, entry.path, "stat"); git_buf_free(&full_path); @@ -570,7 +570,6 @@ int git_diff__oid_for_entry( if (S_ISGITLINK(entry.mode)) { git_submodule *sm; - git_trace(GIT_TRACE_PERF, NULL, "submodule_lookup"); if (!git_submodule_lookup(&sm, diff->repo, entry.path)) { const git_oid *sm_oid = git_submodule_wd_id(sm); if (sm_oid) @@ -583,8 +582,8 @@ int git_diff__oid_for_entry( giterr_clear(); } } else if (S_ISLNK(entry.mode)) { - git_trace(GIT_TRACE_PERF, NULL, "oid_calculation"); error = git_odb__hashlink(out, full_path.ptr); + diff->perf.oid_calculations++; } else if (!git__is_sizet(entry.file_size)) { giterr_set(GITERR_OS, "File size overflow (for 32-bits) on '%s'", entry.path); @@ -596,10 +595,10 @@ int git_diff__oid_for_entry( if (fd < 0) error = fd; else { - git_trace(GIT_TRACE_PERF, NULL, "oid_calculation"); error = git_odb__hashfd_filtered( out, fd, (size_t)entry.file_size, GIT_OBJ_BLOB, fl); p_close(fd); + diff->perf.oid_calculations++; } git_filter_list_free(fl); @@ -655,8 +654,6 @@ static int maybe_modified_submodule( ign == GIT_SUBMODULE_IGNORE_ALL) return 0; - git_trace(GIT_TRACE_PERF, NULL, "submodule_lookup"); - if ((error = git_submodule_lookup( &sub, diff->repo, info->nitem->path)) < 0) { @@ -965,8 +962,6 @@ static int handle_unmatched_new_item( delta_type = GIT_DELTA_ADDED; else if (nitem->mode == GIT_FILEMODE_COMMIT) { - git_trace(GIT_TRACE_PERF, NULL, "submodule_lookup"); - /* ignore things that are not actual submodules */ if (git_submodule_lookup(NULL, info->repo, nitem->path) != 0) { giterr_clear(); @@ -1119,6 +1114,8 @@ int git_diff__from_iterators( error = 0; } + diff->perf.stat_calls += old_iter->stat_calls + new_iter->stat_calls; + cleanup: if (!error) *diff_ptr = diff; @@ -1313,6 +1310,22 @@ int git_diff_is_sorted_icase(const git_diff *diff) return (diff->opts.flags & GIT_DIFF_IGNORE_CASE) != 0; } +static int diff_options_bad_version(int version, const char *thing) +{ + giterr_set(GITERR_INVALID, "Invalid version %d for %s", version, thing); + return -1; +} + +int git_diff_get_perfdata(git_diff_perfdata *out, const git_diff *diff) +{ + if (!out || out->version != GIT_DIFF_PERFDATA_VERSION) + return diff_options_bad_version( + out ? out->version : 0, "git_diff_perfdata"); + out->stat_calls = diff->perf.stat_calls; + out->oid_calculations = diff->perf.oid_calculations; + return 0; +} + int git_diff__paired_foreach( git_diff *head2idx, git_diff *idx2wd, @@ -1615,38 +1628,29 @@ int git_diff_commit_as_email( return error; } -int git_diff_init_options(git_diff_options* opts, int version) +int git_diff_init_options(git_diff_options* opts, unsigned int version) { - if (version != GIT_DIFF_OPTIONS_VERSION) { - giterr_set(GITERR_INVALID, "Invalid version %d for git_diff_options", version); - return -1; - } else { - git_diff_options o = GIT_DIFF_OPTIONS_INIT; - memcpy(opts, &o, sizeof(o)); - return 0; - } + git_diff_options o = GIT_DIFF_OPTIONS_INIT; + if (version != o.version) + return diff_options_bad_version(version, "git_diff_options"); + memcpy(opts, &o, sizeof(o)); + return 0; } -int git_diff_find_init_options(git_diff_find_options* opts, int version) +int git_diff_find_init_options(git_diff_find_options* opts, unsigned int version) { - if (version != GIT_DIFF_FIND_OPTIONS_VERSION) { - giterr_set(GITERR_INVALID, "Invalid version %d for git_diff_find_options", version); - return -1; - } else { - git_diff_find_options o = GIT_DIFF_FIND_OPTIONS_INIT; - memcpy(opts, &o, sizeof(o)); - return 0; - } + git_diff_find_options o = GIT_DIFF_FIND_OPTIONS_INIT; + if (version != o.version) + return diff_options_bad_version(version, "git_diff_find_options"); + memcpy(opts, &o, sizeof(o)); + return 0; } -int git_diff_format_email_init_options(git_diff_format_email_options* opts, int version) +int git_diff_format_email_init_options(git_diff_format_email_options* opts, unsigned int version) { - if (version != GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION) { - giterr_set(GITERR_INVALID, "Invalid version %d for git_diff_format_email_options", version); - return -1; - } else { - git_diff_format_email_options o = GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT; - memcpy(opts, &o, sizeof(o)); - return 0; - } + git_diff_format_email_options o = GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT; + if (version != o.version) + return diff_options_bad_version(version, "git_diff_format_email_options"); + memcpy(opts, &o, sizeof(o)); + return 0; } |