void ref_update_env(struct argv_env *env, const struct ref *ref, bool recurse) { bool clear = recurse ? !ref->next : true; if (recurse && ref->next) ref_update_env(env, ref->next, true); if (clear) env->tag[0] = env->remote[0] = env->branch[0] = 0; string_copy_rev(env->commit, ref->id); if (ref_is_tag(ref)) { string_ncopy(env->tag, ref->name, strlen(ref->name)); } else if (ref_is_remote(ref)) { const char *sep = strchr(ref->name, '/'); if (!sep) return; string_ncopy(env->remote, ref->name, sep - ref->name); string_ncopy(env->branch, sep + 1, strlen(sep + 1)); } else if (ref->type == REFERENCE_BRANCH || ref->type == REFERENCE_HEAD) { string_ncopy(env->branch, ref->name, strlen(ref->name)); } }
const struct ref_format * get_ref_format(struct ref_format **ref_formats, const struct ref *ref) { static const struct ref_format default_format = { "", "" }; if (ref_formats) { struct ref_format *format = ref_formats[ref->type]; if (!format && ref_is_tag(ref)) format = ref_formats[REFERENCE_TAG]; if (!format && ref_is_remote(ref)) format = ref_formats[REFERENCE_REMOTE]; if (!format) format = ref_formats[REFERENCE_BRANCH]; if (format) return format; } return &default_format; }
void ref_update_env(struct argv_env *env, const struct ref *ref, bool clear) { if (clear) env->tag[0] = env->remote[0] = env->branch[0] = 0; string_copy_rev(env->commit, ref->id); if (ref_is_tag(ref)) { string_copy_rev(env->tag, ref->name); } else if (ref_is_remote(ref)) { const char *sep = strchr(ref->name, '/'); if (!sep) return; string_ncopy(env->remote, ref->name, sep - ref->name); string_copy_rev(env->branch, sep + 1); } else if (ref->type == REFERENCE_BRANCH) { string_copy_rev(env->branch, ref->name); } }