summaryrefslogtreecommitdiff
path: root/src/describe.c
diff options
context:
space:
mode:
authorLinquize <linquize@yahoo.com.hk>2014-10-10 23:37:20 +0800
committerLinquize <linquize@yahoo.com.hk>2014-10-11 07:52:47 +0800
commit59186d9b15e9dba61fc193b4832f9df4dfc124eb (patch)
treeb31767fca294931c90e1b9ca827858731cc57b64 /src/describe.c
parent0494a7c9a9affce8935b34fa6d7cd1b5428e081f (diff)
downloadlibgit2-59186d9b15e9dba61fc193b4832f9df4dfc124eb.tar.gz
describe: Initialize options for git_describe_format() if null
Diffstat (limited to 'src/describe.c')
-rw-r--r--src/describe.c44
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;