diff options
author | Linquize <linquize@yahoo.com.hk> | 2014-10-10 23:37:20 +0800 |
---|---|---|
committer | Linquize <linquize@yahoo.com.hk> | 2014-10-11 07:52:47 +0800 |
commit | 59186d9b15e9dba61fc193b4832f9df4dfc124eb (patch) | |
tree | b31767fca294931c90e1b9ca827858731cc57b64 /src/describe.c | |
parent | 0494a7c9a9affce8935b34fa6d7cd1b5428e081f (diff) | |
download | libgit2-59186d9b15e9dba61fc193b4832f9df4dfc124eb.tar.gz |
describe: Initialize options for git_describe_format() if null
Diffstat (limited to 'src/describe.c')
-rw-r--r-- | src/describe.c | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/describe.c b/src/describe.c index cd6e473b6..4e5d438c6 100644 --- a/src/describe.c +++ b/src/describe.c @@ -759,19 +759,35 @@ out: return error; } -int git_describe_format(git_buf *out, const git_describe_result *result, const git_describe_format_options *opts) +static int normalize_format_options( + git_describe_format_options *dst, + const git_describe_format_options *src) +{ + if (!src) { + git_describe_init_format_options(dst, GIT_DESCRIBE_FORMAT_OPTIONS_VERSION); + return 0; + } + + memcpy(dst, src, sizeof(git_describe_format_options)); + return 0; +} + +int git_describe_format(git_buf *out, const git_describe_result *result, const git_describe_format_options *given) { int error; git_repository *repo; struct commit_name *name; + git_describe_format_options opts; assert(out && result); - GITERR_CHECK_VERSION(opts, GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, "git_describe_format_options"); + GITERR_CHECK_VERSION(given, GIT_DESCRIBE_FORMAT_OPTIONS_VERSION, "git_describe_format_options"); + normalize_format_options(&opts, given); + git_buf_sanitize(out); - if (opts->always_use_long_format && opts->abbreviated_size == 0) { + if (opts.always_use_long_format && opts.abbreviated_size == 0) { giterr_set(GITERR_DESCRIBE, "Cannot describe - " "'always_use_long_format' is incompatible with a zero" "'abbreviated_size'"); @@ -787,14 +803,14 @@ int git_describe_format(git_buf *out, const git_describe_result *result, const g if ((error = display_name(out, repo, name)) < 0) return error; - if (opts->always_use_long_format) { + if (opts.always_use_long_format) { const git_oid *id = name->tag ? git_tag_target_id(name->tag) : &result->commit_id; - if ((error = show_suffix(out, 0, repo, id, opts->abbreviated_size)) < 0) + if ((error = show_suffix(out, 0, repo, id, opts.abbreviated_size)) < 0) return error; } - if (result->dirty && opts->dirty_suffix) - git_buf_puts(out, opts->dirty_suffix); + if (result->dirty && opts.dirty_suffix) + git_buf_puts(out, opts.dirty_suffix); return git_buf_oom(out) ? -1 : 0; } @@ -804,14 +820,14 @@ int git_describe_format(git_buf *out, const git_describe_result *result, const g char hex_oid[GIT_OID_HEXSZ + 1] = {0}; int size; if ((error = find_unique_abbrev_size( - &size, repo, &result->commit_id, opts->abbreviated_size)) < 0) + &size, repo, &result->commit_id, opts.abbreviated_size)) < 0) return -1; git_oid_fmt(hex_oid, &result->commit_id); git_buf_put(out, hex_oid, size); - if (result->dirty && opts->dirty_suffix) - git_buf_puts(out, opts->dirty_suffix); + if (result->dirty && opts.dirty_suffix) + git_buf_puts(out, opts.dirty_suffix); return git_buf_oom(out) ? -1 : 0; } @@ -822,14 +838,14 @@ int git_describe_format(git_buf *out, const git_describe_result *result, const g if ((error = display_name(out, repo, name)) < 0) return error; - if (opts->abbreviated_size) { + if (opts.abbreviated_size) { if ((error = show_suffix(out, result->tag->depth, repo, - &result->commit_id, opts->abbreviated_size)) < 0) + &result->commit_id, opts.abbreviated_size)) < 0) return error; } - if (result->dirty && opts->dirty_suffix) { - git_buf_puts(out, opts->dirty_suffix); + if (result->dirty && opts.dirty_suffix) { + git_buf_puts(out, opts.dirty_suffix); } return git_buf_oom(out) ? -1 : 0; |